標籤:
Struts2對異常支援(聲明式異常、自動的異常處理), 異常處理(運行期異常事務自動復原)
1. 自訂異常類,繼承RuntimeException或Exception實現構造方法.
2. 配置異常:全域頁面跳轉,與全域異常處理。其他包如果想使用,需要繼承。
<global-results>
<result name="error">/error.jsp</result>
<result name="input">/input.jsp</result>
</global-results>
<global-exception-mappings>
<!-- result表示發生異常時,跳轉的頁面 -->
<exception-mapping result="error" exception="com.bjpowernode.util.MyException"> </exception-mapping>
</global-exception-mappings>
3. action中加入異常處理,在<action>下面。局部異常。
<exception-mapping result="error" exception="com.bjpowernode.util.MyException"> </exception-mapping>
4. 在頁面中可以使用el取得異常資訊
${exception.message }<br>
${exceptionStack}<br>
5. 有異常先找局部的,沒有再找全域。
防止頁面重新整理和後退:token令牌
1. 頁面的表單中加入token標籤(自動產生token碼)。token放在session中。可以看底層代碼。
2. 配置令牌可以針對不同的方法配置
3. 令牌產生錯誤時傳回值為invalid.token,可通過這個值跳轉到錯誤頁面
4. 使用令牌時不要用redirect或redirectAction,並且要返回當前的頁面,否則token失效。
頁面內容。對一個按鈕進行測試,此按鈕只有一次起作用。其他情況下將無效。
<s:form action="testSave">
<s:token></s:token>
<s:submit value="token"></s:submit>
</s:form>
<interceptor-ref name="token">
<param name="includeMethods">save</param>
</interceptor-ref>
<result name="invalid.token">/input.jsp</result>
5. 不讓用token時用session碼。
6. 重新導向將會找不到token的值,只有特定的頁面有token碼。
7. token必須用strust2的標籤庫。使用者訪問網址,當伺服器將某個頁面解析時會為標籤增加token值,然後將解析完的頁面發送給使用者。
8. token攔截器可以配置在action中,值對特定的action起作用。也可以配置成全域的,對所有action起作用。可通過includeMethods和excludeMethods,來決定對哪些方法使用token標籤。
方法驗證
1. action預設執行execute()方法,該方法會拋出異常。
2. 特定方法的驗證:如要驗證save(),則驗證方法應該是validateSave()。執行順序:validateSave()----validate()---save()。驗證結束後,發生錯誤後,不會繼續往下執行,不再執行save方法。
驗證執行順序:類型轉換----驗證架構----驗證方法,若有錯誤會在所有的驗證執行完後停止,不會執行被驗證的屬性或方法。
3. validate方法先於任何方法執行,包括execute()。是驗證方法。若出現錯誤,將不繼續往下執行,直接返回頁面。執行input對應的頁面。頁面若有接受錯誤的方法,將顯示驗證錯誤的原因等。
有商務邏輯的驗證不要放到validate中。
4. 驗證中的錯誤可以放在ActionError和fieldError裡面。儲存方this.addActionError(anErrorMessage)和this.addFieldError(name,errorMessage)。可以通過調用claerFieldErrors()和
clearActionErrors()方法,來清除fieldErrors和actionErrors中的錯誤資訊,流程繼續往下執行action中的方法。clear方法不行。
5. 頁面擷取驗證訊息:
<body>
<s:fielderror></s:fielderror> //裡面可以加樣式,同下。
<s:actionerror /> //裡面可以加顯示的樣式,如:<s:actionerror cssStyle="color:red"/>
</body>
錯誤資訊的輸出內容,可以通過properties設定檔來決定輸出的內容。設定檔與要驗證的action放在同一個目錄下,名字為要驗證的action名.properties。如:TestAction.properties.檔案內容:
表示若age,birthday,graduation如果發生field層級的錯誤,會往fieldError中添加的錯誤資訊。
紅色的表示固定。
筆記03 異常支援、防止頁面重新整理和後退、方法驗證