-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------html
每一個 action 方法都將返回一個 String 類型的值, Struts 將根據這個值來決定響應什麼結果.java
每一個 action 聲明都必須包含有數量足夠多的 result 元素, 每一個 result 元素分別對應着 action 方法的一個返回值apache
result 元素能夠有下面兩個屬性 name: 結果的名字, 必須與 Action 方法的返回值相匹配, 默認值爲 success type: 響應結果的類型. 默認值爲 dispatcherapp
1.result 簡介 及 type屬性jsp
1)result 是action 節點的子節點學習
2)result 表明 action 方法執行後,可能去的一個目的地ui
3)一個 action節點能夠配置多個 result 子節點url
4)result 的name 屬性對應着action 方法可能的返回值spa
5)result 的type 屬性:表示結果的響應類型code
6)result 的type 屬性值在struts- default 包的result-types 節點中的name屬性中定義
1 <package name="struts-default" abstract="true">
2 <result-types>
3 <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
4 <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
5 <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
6 <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
7 <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
8 <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
9 <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
10 <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
11 <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
12 <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
13 </result-types>
> dispatcher(默認):轉發 同servlet中的轉發是一致的。結果類型將把控制權轉發給應用程序裏的指定資源.
結果類型不能把控制權轉發給一個外部資源. 若須要把控制權重定向到一個外部資源, 應該使用 redirect 結果類型
> redirect:重定向
redirect 結果類型將把響應重定向到另外一個資源, 而不是轉發給該資源.
redirect 結果類型接受下面這些參數: location: 用來給出重定向的目的地.它是默認屬性 parse: 用來代表是否把 location 參數的值視爲一個 OGNL 表達式來解釋. 默認值爲 true
redirect 結果類型能夠把響應重定向到一個外部資源
> redirectActoin:重定向到一個action中
經過redirect 的響應類型也能夠便捷的實現 redirectAcion 的功能
redirectAction 結果類型把響應重定向到另外一個 Action
redirectAction 結果類型接受下面這些參數: actionName: 指定 「目的地」 action 的名字. 它是默認屬性
namespace: 用來指定 「目的地」 action 的命名空間. 若是沒有配置該參數, Struts 會把當前 Action 所在的命名空間做爲 「目的地」 的命名空間
> chain:轉發到一個Action
chain 結果類型的基本用途是構成一個 action 鏈: 前一個 action 把控制權轉發給後一個 action, 而前一個 action 的狀態在後一個 action 中依然保持
chain 結果類型接受下面這些參數: actionName: 指定目標 action 的名字. 它是默認屬性
namespace: 用來指定 「目的地」 action 的命名空間. 若是沒有配置該參數, Struts 會把當前 action 所在的命名空間做爲 「目的地」 的命名空間 method: 指定目標 action 方法. 默認值爲 execute
<package name="testAction" namespace="/" extends="struts-default">
<action name="TestResult" class="com.jason.struts.action.TestResultAction">
<!-- 轉發-->
<result name="success" type="dispatcher">/success.jsp</result>
<!-- 重定向 -->
<result name="login" type="redirect">/login.jsp</result>
<!-- 重定向到一個action -->
<!-- <result name="index" type="redirectAction"> <param name="actionName">testAction</param> <param name="namespace">/jason</param> </result> -->
<!-- 經過 redirect 的響應類型也能夠便捷的實現redirectAction 的功能 -->
<result name="index" type="redirect">/jason/testAction.do</result>
<!-- 轉發到一個 Action -->
<result name="test" type="chain">
<param name="actionName">testAction</param>
<param name="namespace">/jason</param>
</result>
</action>
</package>
<package name="testPackage" namespace="/jason" extends="struts-default">
<action name="testAction" class="com.jason.struts.action.TestAction">
<result name="success">/success.jsp</result>
</action>
</package>
2.通配符映射
1)一個 Web 應用可能有成百上千個 action 聲明. 能夠利用 struts 提供的通配符映射機制把多個彼此類似的映射關係簡化爲一個映射關係
2)通配符映射規則
① 若找到多個匹配, 沒有通配符的那個將勝出 :即,當
② 若指定的動做不存在, Struts 將會嘗試把這個 URI 與任何一個包含着通配符 * 的動做名及進行匹配
③ 被通配符匹配到的 URI 字符串的子串能夠用 {1}, {2} 來引用. {1} 匹配第一個子串, {2} 匹配第二個子串…
④ {0} 匹配整個 URI
⑤ 若 Struts 找到的帶有通配符的匹配不止一個, 則按前後順序進行匹配
⑥ * 能夠匹配零個或多個字符, 但不包括 / 字符. 若是想把 / 字符包括在內, 須要使用 **. 若是須要對某個字符進行轉義, 須要使用 \.
1 <action name="UserAction-*" class="com.jason.struts.action.UserAction" method="{1}"> 2 <result name="{1}-success">/success.jsp</result> 3 </action> 4 5 6 <!-- 7 8 <action name="UserAction-save" class="com.jason.struts.action.UserAction" method="save"> 9 <result name="save-success">/success.jsp</result> 10 </action> 11 12 <action name="UserAction-update" class="com.jason.struts.action.UserAction" method="update"> 13 <result name="update-success">/success.jsp</result> 14 </action> 15 <action name="UserAction-delete" class="com.jason.struts.action.UserAction" method="delete"> 16 <result name="delete-success">/success.jsp</result> 17 </action> 18 <action name="UserAction-query" class="com.jason.struts.action.UserAction" method="query"> 19 <result name="query-success">/success.jsp</result> 20 </action> --> 21
UserAction.java
1 package com.jason.struts.action; 2
3 public class UserAction { 4
5 public String save(){ 6 System.out.println("save ..."); 7 return "save-success"; 8 } 9 public String update(){ 10 System.out.println("update ..."); 11 return "update-success"; 12 } 13 public String delete(){ 14 System.out.println("delete ..."); 15 return "delete-success"; 16 } 17 public String query(){ 18 System.out.println("query ... "); 19 return "query-success"; 20 } 21
22 }
index.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <title>Insert title here</title>
8 </head>
9 <body>
10 <br><br>
11 <a href="UserAction-save.do">User Save</a>
12
13 <br><br>
14 <a href="UserAction-update.do">User Update</a>
15
16 <br><br>
17 <a href="UserAction-delete.do">User Delete</a>
18
19 <br><br>
20 <a href="UserAction-query.do">User Query</a>
21
22 </body>
23 </html>
3.動態方法調用:瞭解
動態方法調用:
經過 url 動態調用 Action 中的方法 action 聲明:
URI:
/struts-app2/Product.action: Struts 調用 Product 類的 execute
/struts-app2/Product!save.action: Struts 調用 Product 類的 save() 方法
默認狀況下, Struts 的動態方法調用處於禁用狀態
開關:struts-core/org.apache.struts2/default.properties 中struts.enable.DynamicMethodInvocation