Struts2 學習整理 大彙總
一 Struts2 概念:
Struts2框架用於javaee 三層架構中的web層(servlet層 顯示層);
Struts2是在Struts1和webwork基礎上發展的全新框架。
二 Struts2 的過濾器
類: StrutsprepareAndExecuteFilter
過濾器在伺服器(tomcat)啟動時就建立了,建立過濾器的時候會執行init(), 在init()方法中主要載入配置檔案
struts.xml & web.xml
三 配置檔案
struts.xml --->Struts2核心配置檔案
位置和名稱都是固定的,位置:src目錄下,名稱:struts.xml(常用)
第二種方式:在src下建立Struts.properties裡面進行配置(不常用)
<!-- 引入dtd 檔案--> <struts><!--struts2的根標籤--> <constant name="struts.i18n.enconding" value="utf-8"></constant> <!-- constant標籤 常量標籤 在Struts2預設常量值 表單提交資料到Action類裡面,如果表單提交資料是通過post提交,可以通過該配置解決中文亂碼,如 果是get提交就需要編碼轉換 --> <!--分模組開發 單獨配置檔案把該配置檔案引入到核心配置檔案中 比如:引入 hello.xml 配置檔案 --> <include file="cn/ss/aciont/hello.xml"/> <constant name ="struts.enable.DynamicMehodInvocation" value="true"></constant> <!-- 動態訪問實現(不用)在struts.xml配置檔案中,動態訪問在struts2中預設是不開啟的, 如果想開啟先 開啟一個常量 頁面訪問路徑${pageContext.request.contextPath}/userAction!save.action --> <package name="demo" extends="struts-default" namespace="/"> <!-- package:類似於程式碼包 區別不同action 要配置action 必須先配置package 標籤package的屬性: name屬性:值和功能本身沒有關係,在一個配置檔案中可以寫多個,一個package標籤中name屬性值不能相同 extends屬性:屬性值是固定的 struts-default 寫了這個屬性值之後,在package裡面配置的類具有action功能 namespace屬性:屬性值和action標籤的name屬性值構成訪問路徑 不寫預設"/" ,一般值為"/"固定的 --> <!--全域性結果頁面配置--> <global-results> <result name="success">/hello.jsp</result> </global-results> <!-- 如果多個actoin,方法裡面返回值相同,到頁面也相同 這時候可以使用全域性結果頁面配置 即配置全域性結果頁面同時配置區域性結果頁面,以區域性結果頁面為準 --> <action name="hello" class="cn.ss.action.HelloAction"> <!-- action標籤配置action訪問路徑 action標籤的屬性: name屬性:namespace屬性值和action標準中的name屬性值構成訪問路徑,一個package標籤裡 可以寫多個action ,但name值不能一樣 classe屬性: Action的全路徑 method屬性: 比如在Action裡面預設執行的方法是execute()方法 ,在Action類裡面可以寫 其他方法,讓Action裡面多個方法執行,使用method屬性配置 --> <result name="ok" type="dispatcher" >/hello.jsp</result> <!-- result標籤 根據Action的方法返回值 ,配置到不同路徑裡面 標籤result的屬性 name屬性: method屬性值=Action裡面方法;方法的返回值=name的屬性值 type屬性(重點): 配置如何到路徑中(轉發或重定向) type屬性的預設值做轉發操作 屬性值:dispatcher 預設值;做轉發操作 值:dispatcher 屬性值:redirect 做重定向 屬性值:chain 轉發到action 一般不用 會有快取資料 屬性值:redirectAction 重定向到action </action> <action name="customer_*" class="cn.ss.action.CustomerAction" method="{1}"> <!-- 使用萬用字元*實現 actio標籤的name屬性寫符號* 執行Action類裡面的add()方法,訪問customer_add,使用customer_*,可匹配到* 相當於變成add 執行Action類裡面的update()方法,訪問customer_update,使用customer_*,可匹配到* 相當於 變成update 使用* 匹配任意方法內容 method屬性值 取值*裡面寫"{1}" --> </action> </package> <struts>
web.xml
配置Struts2的過濾器
<web-app><!--web.xml配置檔案的根目錄--> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
四 Action 類編寫的三種方式
1. 建立普通類,這個類不繼承任何類 不實現任何介面
2.建立類實現介面Action
3.建立類繼承AtionSupport類(ActionSupport implements Action)(常用)
Action介面中有常量值可以直接拿來使用 SUCCESS="success" NONE="none"
none 表示方法沒有返回值 這時候不需要配置result標籤;
相當於方法public void 方法名(){},(這樣寫類也可以實現Action 但不常用)
五 訪問Action的方法(重點)
1.使用action標籤中的method屬性值,屬性值寫Action方法名
2.使用萬用字元*實現 actio標籤的name屬性寫符號*=Action類方法名 任意方法名,action標籤裡的method屬性值 取*值 寫{1}
3.動態訪問實現(不用)
在struts.xml配置檔案中,動態訪問在struts2中預設是不開啟的,如果想開啟先開啟一個常量
<constant name ="struts.enable.DynamicMehodInvocation" value="true"></constant>
頁面訪問路徑${pageContext.request.contextPath}/userAction!save.action