传统异常处理方式
Java中的所有异常的根类是Throwable,Throwable类派生Exception和Error。
Error表示Java程序中出现一个非常严重的错误。
对Exception异常处理的过程中,一般通过try catch finally语句,或者使用throws Exception来捕获异常。
但这种方式需要书写大量的catch块,非常烦琐。最大的问题是,异常处理与代码耦合。一旦需要改变异常处理方式,必须修改代码。
Struts2异常机制
Struts2的异常处理哲学
Struts2提供一种声明式的异常处理方式。
Struts2中,Action的execute()方法抛出全部异常。异常交给Struts2框架处理。
public String execute() throws Exception
Struts2框架接收到Action抛出的异常后,将根据struts.xml文件配置的异常映射,转入指定的视图资源。
Struts2异常处理机制源于Struts2拦截器。在struts-default.xml中已经配置了相关的拦截器。
声明异常捕捉
通过在struts.xml中配置异常映射元素<exception-mapping.../>,Struts2便能够处理异常了。无需在Action中编写任何异常处理代码。
异常映射拦截器
Struts2通过拦截器对action抛出的异常进行捕获,这个拦截器是:
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor
在struts2的默认配置文件struts-default.xml中,拦截器ExceptionMappingInterceptor已经配置。配置片段如下:
<package name="struts-default"
abstract="true">
………
<interceptor name="exception” class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/>
………………
<interceptor-stack
name="defaultStack">
<interceptor-ref
name="exception"/>
………………
<default-interceptor-ref
name="defaultStack"/>
从struts-default包继承的”子”包中的action都将使用默认的拦截器栈defaultStack(除非action引用了其他的拦截器),而在这个拦截器栈中引用了exception拦截器(是defaultStack栈中第一个引用的拦截器)。因此,在默认情况下,所有的action自然就引用了exception拦截器,而不需要再配置它了。
配置异常映射
使用exception-mapping元素来配置异常映射,将异常类型映射到指定的结果。
exception-mapping元素有二个属性:
exception:指定异常映射所设置的异常类型。即指定一个异常类型的完整类名
result:此属性指定Action出现该异常时,系统转入result属性所指向的结果。
根据<exception-mapping.../>元素出现位置的不同,异常映射分为两种:
局部异常映射: 将<exception-mapping.../>元素作为<action…/>元素的子元素配置。
全局异常映射: 将<exception-mapping.../>元素作为<global-exception-mapping…/>元素的子元素配置。
全局映射对所有Action都有效,但局部异常仅对异常映射所在的Action内有效。
如果局部异常映射和全局异常映射配置了同一类型,在该Action内,局部异常映射会覆盖全局异常映射。
全局异常映射的result属性值通常不要使用局部结果,局部异常映射的result属性值既可以使用全局结果,也可以使用局部结果。
与result映射的查找规则一样,当一个异常发生时,exception拦截器将首先查找抛出异常的action中的局部拦截器映射,然后再查找全局的异常映射。只要找到一个匹配的,那么对应的结果就这被处理。
输出异常信息
ExceptionMappingInterceptor捕获Action处理方法抛出的异常后,除了从异常映射的配置中查找对应的结果名外,还会将下列两个值放到值栈中,以便在结果页面中访问异常信息。
exception:异常对象本身。
exceptionStack:保存异常发生时的栈跟踪信息。
在结果页面中。可以使用struts2的标签来访问异常信息:
<s:property value=”exception”/> 输出异常对象本身。
<s:property value=“exception.message” />取出异常对象的描述信息。
<s:property value=”exceptionStack” />
输出异常堆栈信息。
例:
此处省去Action与映射结果页面的编写。
<struts>
<package
name=”default” extends=”struts-default”>
<global-results>
<result
name=”login” type=”redirect”>/login.action</result>
<result
name=”sqlException” type=”chain”>/sqlException</result>
<result
name=”exception”>/exception.jsp</result>
</global-results >
<!--全局异常映射-->
<global-exception-mappings>
<exception-mapping result=”sqlException” exception=”java.sql.SQLException”></exception-mapping>
<exception-mapping result=”exception” exception=”java.sql.Exception”></exception-mapping>
</global-exception-mappings>
<action name=”dataAccess” class=”com.xxx.DataAccess”>
<!--局部异常映射-->
<exception-mapping result=”login” exception=”com.xxx.XXXException”></exception-mapping>
<result>/dataAccess.jsp</result>
</action>
</package>
</struts >
分享到:
相关推荐
Struts2异常处理机制
Struts2 异常处理的四种获取属性方法,大家可以借鉴学习
配合博文:http://blog.csdn.net/u011638419/article/details/41343683
struts2异常处理实例
NULL 博文链接:https://wlh269.iteye.com/blog/321746
struts2的异常处理,解决异步请求时,异常以json格式发送到客户端。以及dao单元测试的配置。
项目中出现的异常通常要用一个友好的异常页面来显示,通过对struts2.xml的配置能拦截全局异常,只要出现异常就会转向异常页面。
本文档主要介绍了struts2的异常处理机制,希望对你有所帮助。
NULL 博文链接:https://wjt276.iteye.com/blog/690323
struts常见异常及处理
NULL 博文链接:https://yuxisanren.iteye.com/blog/1707508
struts2 单文件,多文件上传及异常处理
Struts2的异常处理实例 博文链接:https://zmx.iteye.com/blog/463996
从网上搜索的一段关于struts1.x自定义异常处理的方法。
通过定义继承RuntimeException的异常类及继承ExceptionHandler的异常处理类,手动从dao层捕获异常。非常实用!
使用技术说明: 1.使用struts2+spring3+hibernate3整合实现用户CRUD功能。 2.使用技术 A.Struts2国际化(i18n)、本地化程序。 B.文件上传下载 ... D.Struts2异常处理 3.实现方式 基于配置文件
在网络中查询解决办法大多是使用异常处理的办法,其内容如下: <package name="default" extends="struts-default"> <global-results> <result name="client-abort-exception">/ignored.jsp</result> ...
警告: 本工具为漏洞自查工具,请勿非法攻击他人网站! Struts2漏洞检查工具2017版 V2.0 ...jakatar处理复杂数据类型时,异常处理不当,导致OGNL代码执行,通过在请求的Content-Type头中构造OGNL表达式来执行Java代码。