struts2的声明式异常处理
来源:互联网 发布:yyf淘宝店地址 编辑:程序博客网 时间:2024/05/16 15:47
一、处理一般异常(javaBean异常)
如果Action在处理请求的过程中出现异常,一个名称为exception的拦截器将拦截该异常,并进行处理。所以在struts.xml文件中,需要对exception拦截器进行配置。
1.配置元素
在struts.xml文件中,使用元素,对exception拦截器进行异常映射配置,该元素有以下两个属性:
exception 该属性用来指定出现异常的类型。
result 该属性用来指定出现异常时,Struts 2返回给用户的视图名称。
2.异常映射分类
根据异常映射作用的范围,可以将异常映射配置分为以下两类:
A、全局异常映射
作用范围是package中的所有Action。这种映射使用元素进行配置,在该元素中嵌套作为子元素。
例如:
<package name="error-handler" extends="struts-default">
<global-exception-mappings>
exception="java.lang.NullPointerException"/>
<exception-mapping result="noMethod"
exception="java.lang.NoSuchMethodException"/>
<exception-mapping result="exception"
exception="java.lang.Exception"/>
</global-exception-mappings>
</package>
B、局部异常映射
作用范围是配置元素所在的Action。这种映射是在Action内部,使用元素进行配置。
例如:
<action name="login" class="action.LoginAction">
exception="java.lang.NullPointerException"/>
</action>
这两种异常映射的优先级不同,当两种映射有冲突时,局部映射将覆盖全局异常映射。
###################注意#########################
注意:
当异常发生时,struts2会根据抛出的异常去异常映射文件中寻找在继承关系上与该异常最接近的映射进行匹配。例如,action抛出一个IOException,这个异常是Exception的直接子类。所以会匹配到Exception映射。再者,action抛出一个BatchUpdateException,它既是SQLException的子类,同时也是Exception的子类。但是它和SQLException的继承关系最接近,所以它会匹配到SQLException。
<struts>
</struts>
说明:全局异常也只有在package包下进行配置,只对下面的action起作用,在struts没有如struts中那样的异常。局部异常和全局异常的搭配使用。
用三个例子说明,当访问DataAccess时如果发生异常
一个java.sql.SQLException将会chain到另一个action SQLExceptionAction
一个 com.company.SecurityException 将会重定向到Login.action
任何其他继承了java.lang.Exception 的异常将会转至Exception.jsp
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
值栈中的Exception值:
默认情况下,发生异常时,struts2会向值栈中压入一下两个值:
exception : 异常对象本身
exceptionStack :stack trace的值
到了这里我们可以知道了,有时我们为什么可以在拦截器中能够得到异常对象了吧:
或者异
看到上面的两段代码你会怀疑exception对象时什么时候存放到值栈中和request中的呢???呵呵,其实就是在发生异常的时候struts2向值栈中和request域中存放的!!!!!
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
在jsp中可以打印出异常信息
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<s:actionerror/>
<p>
<%--<s:property value="exception.MyExceptionMsg"/>(其中MyExceptionMsg是我们自定义异常中的一个属性(一定要提供get和set方法)) --%>
</p>
<h3>详细信息</h3>
<p>
<s:debug></s:debug>可以查看值栈信息
</p>
</html>
###################注意#############################
C、处理不存在的Action
<action name="defaultAction" class="com.lsw.permission.action.DefaultAction" />
3.输出异常信息
可以使用Struts 2中的property标签,输出异常信息。
输出异常对象本身,代码如下:
<s:property value="exception.message"/>
或者
<s:property value="exception.MyExceptionMsg"/>
(其中MyExceptionMsg是我们自定义异常中的一个属性(一定要提供get和set方法))
输出异常堆栈信息,代码如下:
<s:property value="exceptionStack"/>
例如sql.jsp页面
二、.处理不存在的页面,如不存在的JSP,html,htm等页面(404异常)
<error-page>
</error-page>
<!-- 处理500异常 -->
<error-page>
</error-page>
- Struts2的声明式异常处理
- Struts2的声明式异常处理
- Struts2的声明式异常处理
- Struts2的声明式异常处理
- Struts2的声明式异常处理
- Struts2的声明式异常处理
- Struts2的声明式异常处理
- Struts2的声明式异常处理
- Struts2的声明式异常处理
- Struts2的声明式异常处理
- Struts2的声明式异常处理
- Struts2的声明式异常处理
- Struts2的声明式异常处理
- Struts2的声明式异常处理
- Struts2的声明式异常处理
- struts2的声明式异常处理
- (三十)Struts2的声明式异常处理
- Struts2---->声明式异常处理
- linux 使用 ----如何让虚拟机上网(vmware)
- [Medium]Best Time to Buy and Sell Stock with Cooldown
- 紫书 例题7-4 UVA 524
- 谁都能看懂的单点登录(SSO)实现方式(附源码)
- [Medium]Ugly Number II
- struts2的声明式异常处理
- Linux中Mongodb的使用
- POJ-3278-Catch That Cow[基础BFS]
- 修改ramdisk根文件系统方法
- [Medium]Maximal Square
- How tomcat works——3 连接器
- [Medium]Maximum Product Subarray
- [Easy]Best Time to Buy and Sell Stock
- 紫书 例题7-5 UVA 129