我們在struts-defalut.xml文件中可以看到如下圖所示:
這些類型是配置文件所帶的。接下來我們主要講解我標注出來的這個,其他的我就不做詳解了,有興趣的可以去試試。
web.xml文件我在這里就不配置了。直接從action開始
1.0當type取值為chain時:
chain:轉發到action
創建LoginAction繼承ActionSupport類定義方法
package cn.struts2.action; import com.opensymphony.xwork2.ActionSupport; import java.util.Map; /** * Created by accp on 2017/3/1. */ public class LoginAction extends ActionSupport { public String list(){ System.out.println("====進入==LoginAction====list============"); return "list"; } public String add(){ System.out.println("====進入====LoginAction==add============"); return "add"; } }
創建ShoppingAction
package cn.struts2.action; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.ServletActionContext; import javax.servlet.http.HttpServletRequest; /** * Created by accp on 2017/3/2. */ public class ShoppingAction extends ActionSupport { public String list(){ System.out.println("========進入ShoppingAction=====list============"); HttpServletRequest request = ServletActionContext.getRequest(); String uname = (String) request.getAttribute("uname"); System.out.println(uname); return "list"; } public String add(){ System.out.println("======進入ShoppingAction=======add============"); return "add"; } }
創建兩個jsp頁面,填寫上不同的內容。
最主要的接下來配置struts.xml
....... <!--轉發到action--> <action name="loginAdd" class="cn.struts2.action.LoginAction" method="add"> <result name="add" type="chain"> <param name="actionName">shoppingList</param> <param name="namespace">/</param> </result> </action> <action name="shoppingList" class="cn.struts2.action.ShoppingAction" method="list"> <result name="list">/success.jsp</result> <result name="success"></result> </action>
<param name="actionName">loginList</param>:指向的是你要轉向的action的邏輯名稱,要特別注意!!!!!!!
actionName:系統定義。在struts-defalut.xml------>result-type----->ActionResultType
運行效果:
因為在一次轉發內攜帶數據是有效的,我們就可以得到上圖的結果。
1.1type取值為dispatcher
dispatcher:轉發到頁面(以LoginAction類為例)
<!--轉發到頁面--> <action name="loginAction2" class="cn.struts2.action.LoginAction" method="add"> <result name="add" type="dispatcher"> /success.jsp </result> </action>
直接指向頁面即可,不需要再返回action通過別的方法。
1.2type取值為redirectAction
redirectAction:重定向action
struts.xml配置:
<!--重定向action--> <action name="loginAction3" class="cn.struts2.action.LoginAction" method="add"> <result name="add" type="redirectAction"> <param name="actionName">shoppingList</param> <param name="namespace">/</param> </result> </action> <action name="shoppingList" class="cn.struts2.action.ShoppingAction" method="list"> <result name="list">/index.jsp</result> </action>
上述方法不變運行,效果圖如下:
從兩張圖中我們可以很清晰的看出,地址欄發生了很大的變化,再看結果,由於我們把數據方法的是request作用域中,在一次轉發內
可以拿到數據,但是重定向相當於重新請求,攜帶的數據消失,得到null。
1.3type取值為redirect
redirect:重定向到頁面
<!--重定向到頁面--> <action name="loginAction4" class="cn.struts2.action.ShoppingAction" method="list"> <result name="list" type="redirect"> /success.jsp </result> </action>
重定向地址欄都會發生變化,在使用的時候要根據自己的需求選擇合適的類型。
1.4type取值為plainText
plainText:純文本
struts.xml:
<!--plainText--> <action name="loginAction5" class="cn.struts2.action.LoginAction" method="add"> <result name="add" type="plainText"> <param name="charSet">UTF-8</param> <param name="location">/index.jsp</param> </result> </action>
<param name="charSet">UTF-8</param>:
location:指向那個頁面。
效果圖:
得到的是源代碼。很神奇是吧,你可以試試其他的類型。
就到這里吧............