一般的struts2異常處理流程分為
1.action抛出的異常
2.action傳回error
針對這兩種異常,我們通過message檔案同一定義異常,在程式中傳回異常編碼,流程如下:
1.定義異常屬性檔案XXX.properties
shop.shopaction.error.editshopinfo = 店鋪名稱或域名已存在,修改失敗!
shop.vendershopaction.exist.error=店鋪不存在
shop.vendershopaction.banner.error=banner圖檔類型或大小錯誤
shop.vendershopaction.logo.error=logo圖檔類型或大小錯誤
shop.vendershopaction.venderorshop.error=商家或店鋪已停用
2.定義struts.xml。 屬性檔案的引用、全局異常的定義
<constant name="struts.custom.i18n.resources" value="message/message"/>
<global-results>
<result name="exception">/WEB-INF/vm/error.vm</result>
<result name="error">/WEB-INF/vm/error.vm</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="exception"/>
</global-exception-mappings>
3.定義velocity.properties
tools.view.servlet.layout.directory=/WEB-INF/vm/layout/
tools.view.servlet.error.template=/WEB-INF/vm/error.vm
tools.view.servlet.layout.default.template=default.vm
velocimacro.library=/WEB-INF/vm/macro.vm
input.encoding=gbk
output.encoding=gbk
runtime.log.logsystem.class=org.springframework.ui.velocity.CommonsLoggingLogSystem
4.編寫error.vm
#* @vtlvariable name="exception" type="java.lang.Exception" *#
#* @vtlvariable name="result" type="com.jd.common.web.result.Result" *#
#if($exception)
#if($!exception.class.simpleName=="NoSuchMethodException")
$!response.setStatus(404)
404! 您請求的内容不存在
#else
出錯了: $exception.message
#end
#elseif($result)
#if($result.resultCode)
#showSimpleError()
#else
系統錯誤
#end
#end
5.編寫macro.vm(引用的showSimpleError() 方法)
#* @vtlvariable name="module" type="com.jd.common.web.url.JdUrl" *#
#* @vtlvariable name="page" type="com.jd.common.util.base.PaginatedArrayList" *#
#macro(showSimpleError)
#if(!$!actionErrors.empty)
#foreach($str in $actionErrors)
$!str
#break
#end
#end
#end
6.
a.action中抛出異常時,struts捕獲異常,跳入error.vm中,顯示相應内容
b.action傳回error時:
String text = getText("shop.shopaction.error.editshopinfo");//店鋪名稱或域名已存在,修改失敗!
addActionError(text);
最後在頁面顯示處調用宏方法
#showSimpleError()
至此,struts2整合velocity的異常處理流程就結束了,關鍵還是在于對于異常的定義,以及程式中異常處理的方法,每個團隊都有自己的一套流程,在此就不再讨論!下面有個例子,感興趣的可以下載下傳試試,jar包主要就是struts2,和velocity的