Struts2的使用步驟
手動導入:
1. 創建Web項目。
2. 導入Strutrs的幾個必須包(7個jar)。
3. 在src目錄下,創建struts.xml配置文件(名字和路徑都不能改)。
4. 在web.xml配置文件中,添加Struts的支持(配置一個filter過濾器)。
自動導入(Myeclipse8.0以上的版本):
類型轉換
1. Struts2中類型轉換分爲兩種:
a) 手動(自定義)轉換器
b) 自動轉換器
2. 手動(自定義)轉換器(針對特殊屬性)
a) 在action的類中,必須繼承ActionSupport類。
b) 定義轉換器的類,繼承DefaultTypeConvert,重寫convertValue()方法。
c) 創建配置文件(注意:1.文件名必須是:Action的類名-conversion.properties ; 2. 必須將配置文件存放在Action所在的包中。)
3. 自動轉換器(常用的方式)
基本數據類型+String類型都是可以自動轉換。
對象類型自動轉換:在input中使用:對象名.屬性名 |
Struts2的輸入驗證
一.驗證分類:
1. 服務器端驗證(Java代碼來完成驗證(Struts的內置驗證框架,可以完成服務器端驗證))。
2. 客戶端驗證(js驗證——在客戶端執行,執行的時候依賴與客戶度(手動js驗證,jquery驗證框架進行驗證))
二.Struts的內置驗證框架:
Struts2中驗證有兩種方式:
1. 手動驗證。
2. 配置驗證框架,自動驗證。
三.內置驗證框架使用步驟:
1. 需要驗證的Action必須繼承自ActionSupport類。
2. 創建驗證配置文件。
要求:a) 配置文件必須和action在同一目錄。
b) 文件名的格式必須是:Action類名-validation.xml(驗證Action中的所有方法)
Action類名-訪問Action的名字-validation.xml(只會驗證Action中指定的方法)
3. 查看內置驗證器:xwork-XXXXX.jar目錄中(找到default.xml配置文件)
特別需要注意:
1. 使用了驗證器之後,如果驗證失敗;必須配置<result name=”input”></result>表示驗證失敗之後,跳轉的頁面。
2. 如果jsp頁面中使用了,Struts的標籤;那麼必須讓這個jsp頁面必須經過struts的核心過濾器,進行過濾;否則頁面不能正常解析struts的標籤。(web.xml 中配置過濾器,過濾 *.jsp)
3. 基本數據類型,不能使用Struts的內置驗證,建議使用包裝類。
四.手動驗證步驟:
1. 繼承ActionSupport,重寫validate()方法。
在執行Action中具體的方法之前,會先執行validate()方法;如果有錯誤,則返回input指定的頁面。(有錯誤:super.addFiledError())
手動驗證總結:
1. 可以在實體中的setXxx()方法進行控制。
2. 在validate()方法中進行驗證。
深入Struts2
Struts2運行原理:
請求 --- >自定義過濾器----> filterdispatcher ------> ActionProxy(代理,讀取struts.xml的配置文件)---->ActionInvocation(action的調用者,調用具體的Action;在調用之前經過一系列的攔截器)——>執行完Action之後,跳轉到對應的頁面。
注意:struts中的所有編碼處理都是i18n攔截器處理,所有的表單數據處理都是在系統默認攔截器中獲取。
Struts.xml配置文件詳解:
<constant name="" value=""></constant> |
<!-- 常量:系統默認配置的量(名字不可改) --> <!-- 常用的常量:struts.custome.i18n.resources(國際化常量) --> <!-- 常用的常量:struts.i18n.encoding(編碼方式常量,系統默認採用utf-8編碼) --> |
動態方法調用:
注意:1. 在配置<action>的時候,不用指定具體的方法(不用寫method=“XXX”);
2. 在請求action的路徑指定需要執行的方法名即可。(格式:action名!方法名.action)
使用通配符進行模糊匹配:
<action name="*Calc" class="com.zuxia.action.TestAction" method="{1}" > <result name=”名字”>{1}.jsp</result> </action> 注意:使用“*”號表示模糊匹配的值。{1}表示佔位符,在運行的過程中,被通配符所代替。 在這個Action的配置文件中,都可以使用{1}佔位。 |
Struts2對返回結果頁面進行配置:
<result name=”方法的返回值” type=””>頁面路徑</result> |
type=”” 表示頁面跳轉的方式,默認表示內部跳轉。 type=”redirect” 表示頁面使用外部跳轉,注意外部跳轉request中的數據將會丟失。
type=”redirectAction” 表示跳轉的頁面將會是一個Action。 <result type=” redirectAction”> <param name=”actionName”>action的名字</param> <param name=”namespace”>命名空間的名字</param> </result> |
原樣輸出指定的頁面: <result name="ok" type="plainText"> <param name="location">test.jsp</param> <param name="charSet">utf-8</param> </result> |
全局結果配置:
<!-- 配置全局的結果,跳轉頁面 --> <global-results> <result name="error">test.jsp</result> <result name="ok">index.jsp</result> </global-results> 注意:必須在action的最前面。 |
全局異常處理: <global-exception-mappings> <exception-mapping result="返回的結果名" exception="異常類型"></exception-mapping> </global-exception-mappings>
在異常處理頁面,顯示異常的信息: <%@ taglib uri="/struts-tags" prefix="s" %> 異常的信息: <s:property value="exceptionStack"/> |
<interceptors> <interceptor name="firstinter" class="com.zuxia.interceptor.FristInterceptor" />
<interceptor-stack name="testStack"> <interceptor-ref name="firstinter" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> 在actin中調用使用如下方式: <action …………> <interceptor-ref name="testStack" /> </action> |