struts2的异常处理

[size=medium]struts2进行异常处理首先需要添加exception拦截器,而默认拦截器栈已经加入了这个拦截器,所以不用特意的声明。struts2的异常映射声明有两种,全局声明和局部声明。


异常映射有两个属性:exception属性指定了异常的类型,result属性指定了发生异常时执行的result。


当一个异常发生时,它会先寻找局部异常映射,未找到则会寻找全局异常映射。若匹配上之后就会根据result属性按照先局部后全局的方式寻找相同名字的的result,然后就像action调用result一样执行对应的result。
注意:当异常发生时,struts2会根据抛出的异常去异常映射文件中寻找在继承关系上与该异常最接近的映射进行匹配。例如,action抛出一个IOException,这个异常是Exception的直接子类。所以会匹配到Exception映射。再者,action抛出一个BatchUpdateException,它既是SQLException的子类,同时也是Exception的子类。但是它和SQLException的继承关系最接近,所以它会匹配到SQLException
<struts>
<package name="default">
...
<global-results>
<result name="login" type="redirect">/Login.action</result>
<result name="Exception">/Exception.jsp</result>
</global-results>

<global-exception-mappings>
<exception-mapping exception="java.sql.SQLException" result="SQLException"/>
<exception-mapping exception="java.lang.Exception" result="Exception"/>
</global-exception-mappings>
...
<action name="DataAccess" class="com.company.DataAccess">
<exception-mapping exception="com.company.SecurityException" result="login"/>
<result name="SQLException" type="chain">SQLExceptionAction</result>
<result>/DataAccess.jsp</result>
</action>
...
</package>
</struts>


用三个例子说明,当访问DataAccess时如果发生异常
一个java.sql.SQLException将会chain到另一个action SQLExceptionAction
一个 com.company.SecurityException 将会重定向到Login.action
任何其他继承了java.lang.Exception 的异常将会转至Exception.jsp


值栈中的Exception值:默认情况下,发生异常时,struts2会向值栈中压入一下两个值

[table]
|[b]exception[/b]|异常对象本身|
|[b]exceptionStack[/b]|stack trace的值|
[/table]

例如指定发生异常时,转到一个jsp页面,可以在jsp页面中输出异常信息
<h3>出错信息</h3>
<s:actionerror/>
<p>
<s:property value="%{exception.message}"/>
</p>
<h3>详细信息</h3>
<p>
<s:property value="%{exceptionStack}"/>
</p>[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值