1.經常使用四種類型:html
a) dispatcher(默認)java
服務器跳轉(普通轉發),就是forward到一個JSP或者HTML或者其餘結果頁面,不能是Actionweb
視圖請求地址是 http://localhost:8080/myweb/r1/r1.jsp瀏覽器
瀏覽器最後顯示的地址是 http://localhost:8080/myweb/r1/r1.jsp服務器
b) redirectjsp
重定向到結果視圖ide
視圖請求地址是 http://localhost:8080/myweb/r2/r2.jspui
瀏覽器最後顯示的地址是 http://localhost:8080/myweb/r2.jspspa
c) chaindebug
服務器forward(轉發)到一個另外一個Action
視圖請求地址是 http://localhost:8080/myweb/r3/r1.jsp
瀏覽器最後顯示的地址是 http://localhost:8080/myweb/r1/r1.jsp
d) redirectAction
重定向到另一個Action
視圖請求地址是 http://localhost:8080/myweb/r4/r2.jsp
瀏覽器最後顯示的地址是 http://localhost:8080/myweb/r2.jsp
重點是上面兩種
<struts> <constant name="struts.devMode" value="true" /> <package name="resultTypes" namespace="/r" extends="struts-default"> <action name="r1"> <result type="dispatcher">/r1.jsp</result> </action> <action name="r2"> <result type="redirect">/r2.jsp</result> </action> <action name="r3"> <result type="chain">r1</result> </action> <action name="r4"> <result type="redirectAction">r2</result> </action> </package>
若是chain是不一樣的命名空間:
<result type="chain"> <param name="actionName">dashboard</param> <param name="namespace">/secure</param> </result>
2.全局結果集
Global_Results
<struts> <constant name="struts.devMode" value="true" /> <package name="user" namespace="/user" extends="struts-default"> <global-results> <result name="mainpage">/main.jsp</result> </global-results> <action name="index"> <result>/index.jsp</result> </action> <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> <result>/user_success.jsp</result> <result name="error">/user_error.jsp</result> </action> </package> <package name="admin" namespace="/admin" extends="user"> <action name="admin" class="com.bjsxt.struts2.user.action.AdminAction"> <result>/admin.jsp</result> </action> </package> </struts>
Global_Results是在package標籤下。
意思就是說這個namespace下全部的action共享,當某一個action找不到對應的result時,就找到了它。
extends
同時這個extends 是表示namespace繼承的意思,能夠獲得它繼承namespace的全部配置
默認的都是繼承於
extends="struts-default"
它的源碼在struts-core-2.1.6.jar包裏面
裏面配置了不少的攔截器等。
可是在實際開發中,這種繼承關係若是多了就會很複雜
因此實際上通常用在
好比說有好幾個模塊,用戶管理,學生管理,老師管理,權限管理等
它們有公用頁面
好比返回首頁,錯誤信息返回等,
可使用到繼承
$這種寫法
用在能夠在配置文件裏往值棧裏面取值
一個UserAction.java裏面的內容都會存放在值棧裏面
能夠去讀value Stack 裏的內容
能夠在類中用一個屬性用來保存一個結果
這個屬性的值能夠動態肯定
在struct裏面能夠用$符號把結果取出來
3.動態結果
在action中保存一個屬性,存儲具體的結果位置location
index.jsp:
<body> 動態結果 必定不要忘了爲動態結果的保存值設置set get方法 <ol> <li><a href="user/user?type=1">返回success</a></li> <li><a href="user/user?type=2">返回error</a></li> </ol> </body>
struct.xml :
經過$符號取出值棧裏面的內容
<struts> <constant name="struts.devMode" value="true" /> <package name="user" namespace="/user" extends="struts-default"> <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> <result>${r}</result> </action> </package> </struts>
UserAction.java
爲這個屬性動態指定location
@Override public String execute() throws Exception { if(type == 1) r="/user_success.jsp"; else if (type == 2) r="/user_error.jsp"; return "success"; }
/user_success.jsp
<?xml version="1.0" encoding="GB18030" ?> <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <title>UserSuccess</title> </head> <body> User Success! <s:property value="r"/> <s:debug></s:debug> </body> </html>
4.傳遞參數
struct中間帶參數
重定向才須要傳遞
使用${}
<package name="user" namespace="/user" extends="struts-default"> <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> <result type="redirect">/user_success.jsp?t=${type}</result> </action> </package>
redirect如何能把數據從一個視圖傳遞到另外一個視圖?
連接 用action向其餘視圖傳遞參數(redirect才須要傳遞)