国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Struts2學習筆記(三)——Action詳解

2019-11-15 00:50:44
字體:
來源:轉載
供稿:網友
Struts2學習筆記(三)——Action詳解

Action是用于處理請求操作的,它是由StrutsPRepareAndExceuteFilter分發過來的。

1、Action的創建方式

1)POJO類(PlainOldjavaObjects簡單的Java對象),不需要繼承任何父類,實現任何接口

1 public class TestAction {2     public String execute() {3         return "success";4     }5 }

這種方式是Struts2框架通過反射來實現的,步驟:

  • struts2框架通過讀取struts.xml配置文件獲得完整的Action類名;
  • object = Class.forName("完整類名").newInstance();
  • Method method = Class.forName("完整類名").getMethod("execute");
  • method.invoke(object);

2)實現Action接口

 1 public class TestAction implements Action { 2     /** 3      * 可以不重寫execute方法,用自定義的方法,但是 4      * 在配置文件中需要顯示指定方法名method=要執行的方法 5      */ 6     @Override 7     public String execute() { 8         return "success"; 9     }10 }

Action接口中,定義默認五種邏輯視圖名稱:

public static final String SUCCESS = "success";  // 數據處理成功 (成功頁面)public static final String NONE = "none";  // 頁面不跳轉  return null; 效果一樣public static final String ERROR = "error";  // 數據處理發送錯誤 (錯誤頁面)public static final String INPUT = "input"; // 用戶輸入數據有誤,通常用于表單數據校驗 (輸入頁面)public static final String LOGIN = "login"; // 主要權限認證 (登陸頁面)

五種邏輯視圖用來解決Action處理數據后,跳轉頁面

3)繼承ActionSupport類(推薦)

其實ActionSupport類本身已經實現了Action接口,而且可以在Action中使用表單校驗、錯誤信息設置、讀取國際化信息三個功能,所以推薦使用。

 1 public class TestAction extends ActionSupport { 2     /** 3      * 可以不重寫execute方法,用自定義的方法,但是 4      * 在配置文件中需要顯示指定方法名method=要執行的方法 5      */ 6     @Override 7     public String execute() { 8         return "success"; 9     }10 }

2、Action的訪問

在配置<action>元素時,沒有指定method屬性,默認執行Action類中execute方法。

1)基本訪問

jsp頁面中有下面的action訪問路徑:

1 <a href="${pageContext.request.contextPath}/book/update.action">測試</a>

struts.xml的配置文件:

 1 <struts> 2     <constant name="struts.devMode" value="true" /> 3     <package name="default" namespace="/book" extends="struts-default"> 4         <action name="add" class="cn.sunny.action.BookAction" method="add"> 5             <result name="success">/success.jsp</result> 6         </action> 7         <action name="update" class="cn.sunny.action.BookAction" method="update"> 8             <result name="success">/success.jsp</result> 9         </action>10         <action name="delete" class="cn.sunny.action.BookAction" method="delete">11             <result name="success">/success.jsp</result>12         </action>13         <action name="search" class="cn.sunny.action.BookAction" method="search">14             <result name="success">/success.jsp</result>15         </action>16     </package>17 </struts>

通過<package>的namespace與<action>的name屬性結合與請求資源路徑對比,可以知道訪問哪一個action,在通過<action>的class知道訪問哪一個Action類,通過method知道訪問哪一個方法。

2)使用通配符

使用通配符* 可以簡化struts.xml配置

jsp頁面:

1 <a href="${pageContext.request.contextPath}/book/Book_add">book_add</a><br>2 <a href="${pageContext.request.contextPath}/book/Book_update">book_update</a><br>3 <a href="${pageContext.request.contextPath}/book/Book_delete">book_delete</a><br>4 <a href="${pageContext.request.contextPath}/book/Book_search">book_search</a><br> 

action的配置:

1 <struts>2     <constant name="struts.devMode" value="true" />3     <package name="default" namespace="/book" extends="struts-default">4         <action name="*_*" class="cn.itcast.action.{1}Action" method="{2}">5             <result name="success">/success.jsp</result>6         </action>7     </package>8 </struts>

<action>中的name屬性的值中每一個"*"代表長度不為0的任意字符串,name="*_*"表示頁面訪問的action名稱必須為為類似book_add.action、book _update.action形式。

如果在name屬性定義了通配符之后,可以在class屬性、method屬性、<result>的name屬性以及返回的jsp頁面名字中都可以使用通配符,{1}代表第一個*,{2}代表第二個*。

3)動態方法調用

當在<action>中不配置method屬性同時又不希望執行默認的execute方法時,可以使用動態方法調用,訪問的方式為"action名"+"!"+"方法名":

<a href="${pageContext.request.contextPath}/book/book!add">bookadd</a>

action配置:

1 <struts>2     <constant name="struts.devMode" value="true" />3     <package name="default" namespace="/book" extends="struts-default">4         <action name="book" class="cn.sunny.action.BookAction">5             <result name="success">/success.jsp</result>6         </action>7     </package>8 </struts>

注意事項:在struts2的常量配置中有一項可以設置關閉動態方法調用,默認是允許:

1 struts.enable.DynamicMethodInvocation = true

3、Action名稱搜索順序

1)獲取請求路徑的URL,例如URL為:

<a href="${pageContext.request.contextPath}/path1/path2/path3/update.action">測試</a>

2)首先尋找namespace為/path1/path2/path3的package,如果存在這個package,則在這個package中尋找名字為update的action,如果不存在這個package則執行第3步;

3)尋找namespace為/path1/path2的package,如果存在這個package,則在這個package中尋找名字為update的action,如果不存在這個package則執行第4步;

4)尋找namespace為/path1的package,如果存在這個package,則在這個package中尋找名字為update的action,如果仍然不存在這個package,則去默認的namespace的package中尋找名字為update的action(默認的namespace值為"/"),如果還是找不到,頁面提示找不到action。

4、package配置中默認值

1)如果沒有為package指定namespace,則默認的namespace值為"/";

2)如果action中沒有指定class,則默認的class為ActionSupport;

3)如果action中沒有指定method,則默認的method為execute;

4)如果result中沒有指定name,則默認的name為success。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河曲县| 林甸县| 美姑县| 兴山县| 滦南县| 密云县| 北京市| 晋宁县| 盐池县| 钟山县| 龙南县| 石景山区| 遂溪县| 新和县| 焦作市| 申扎县| 南陵县| 山东省| 增城市| 永康市| 泗水县| 宁波市| 高邑县| 巴青县| 山东| 吴忠市| 阳信县| 长葛市| 呈贡县| 大石桥市| 安徽省| 专栏| 中方县| 昭苏县| 元谋县| 普兰店市| 万州区| 南昌县| 荃湾区| 鄂州市| 清涧县|