struts異常處理
在web開發中經常要處理異常這樣無論用戶進行怎樣的操作都不會把異常頁面展現給用戶這樣可以給用戶一個好的感受現在來說下struts進行開發中進行的異常處理
在servlet中進行異常處理在webxml中配置文件中加入以下代碼:
<! 處理異常 >
<errorpage>
<errorcode></errorcode>
<location>/commons/errorjsp</location>
</errorpage>
<errorpage>
<exceptiontype>javalangNullPointerException</exceptiontype>
<location>/commons/errornulljsp</location>
</errorpage>
struts進行異常處理首先需要添加exception攔截器而默認攔截器棧已經加入了這個攔截器所以不用特意的聲明struts的異常映射聲明有兩種全局聲明和局部聲明
注意:當異常發生時struts會根據拋出的異常去異常映射文件中尋找在繼承關系上與該異常最接近的映射進行匹配例如action拋出一個IOException這個異常是Exception的直接子類所以會匹配到Exception映射再者action拋出一個BatchUpdateException它既是SQLException的子類同時也是Exception的子類但是它和SQLException的繼承關系最接近所以它會匹配到SQLException
<struts>
<package name=default>
<globalresults>
<result name=login type=redirect>/Loginaction</result>
<result name=Exception>/Exceptionjsp</result>
</globalresults>
<globalexceptionmappings>
<exceptionmapping exception=javasqlSQLException result=SQLException/>
<exceptionmapping exception=javalangException result=Exception/>
</globalexceptionmappings>
<action name=DataAccess class=panyDataAccess>
<exceptionmapping exception=panySecurityException result=login/>
<result name=SQLException type=chain>SQLExceptionAction</result>
<result>/DataAccessjsp</result>
</action>
</package>
</struts>
說明全局異常也只有在package包下進行配置只對下面的action起作用在struts沒有如struts中那樣的異常局部異常和全局異常的搭配使用
用三個例子說明當訪問DataAccess時如果發生異常
一個javasqlSQLException將會chain到另一個action SQLExceptionAction
一個 panySecurityException 將會重定向到Loginaction
任何其他繼承了javalangException 的異常將會轉至Exceptionjsp
值棧中的Exception值默認情況下發生異常時struts會向值棧中壓入一下兩個值
exception 異常對象本身
exceptionStack
stack trace的值
在jsp中可以打印出異常信息
<%@ page language=java import=javautil* pageEncoding=UTF%>
<%@ taglib prefix=s uri=s %>
<!DOCTYPE HTML PUBLIC //WC//DTD HTML Transitional//EN>
<html>
<head>
<title>系統異常</title>
</head>
<body>
<h>出錯信息請與管理員聯系</h>
<s:actionerror/>
<p>
<s:property value=%{ssage}/>
</p>
<h>詳細信息</h>
<p>
<s:property value=%{exceptionStack}/>
</p>
</body>
</html>
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28331.html