在Struts 2框架中,采用声明式异常处理方式。在这种方式下,只需要在struts.xml文件中进行配置,Struts 2便能够处理异常,并跳转到相应的视图,而在Action中无须编写任何异常处理代码。
如果Action在处理请求的过程中出现异常,一个名称为exception的拦截器将拦截该异常,并进行处理。所以在struts.xml文件中,需要对exception拦截器进行配置。
1.配置元素
在struts.xml文件中,使用<exception-mapping>元素,对exception拦截器进行异常映射配置,该元素有以下两个属性:
exception 该属性用来指定出现异常的类型。
result 该属性用来指定出现异常时,Struts 2返回给用户的视图名称。
2.异常映射分类
根据异常映射作用的范围,可以将异常映射配置分为以下两类:
全局异常映射
作用范围是package中的所有Action。这种映射使用<global-exception-mapping>元素进行配置,在该元素中嵌套<exception-mapping>作为子元素。
例如:
<global-exception-mappings>
<exception-mapping result="nullPoint"
exception="java.lang.NullPointerException"/>
</global-exception-mappings>
局部异常映射
作用范围是配置元素所在的Action。这种映射是在Action内部,使用<exception-mapping>元素进行配置。
例如:
<action name="login" class="action.LoginAction">
<exception-mapping result="nullPoint"
exception="java.lang.NullPointerException"/>
<result name="success">/welcome.jsp</result>
<result name="nullPoint">/nullpoint.jsp</result>
</action>
这两种异常映射的优先级不同,当两种映射有冲突时,局部映射将覆盖全局异常映射。
3.输出异常信息
可以使用Struts 2中的property标签,输出异常信息。
输出异常对象本身,代码如下:
<s:property value="exception.message"/>
输出异常堆栈信息,代码如下:
<s:property value="exceptionStack"/>
例如sql.jsp页面
<body>
<s:property value="exception.message"/>
</body>