struts配置全局异常result与全局异常映射mapping以及自定义返回类型

来源:互联网 发布:常见电信网络诈骗试题 编辑:程序博客网 时间:2024/04/30 12:31

今天项目要配置异常页面。

贴配置

<!-- 配置全局结果及异常映射 --><package name="base-default" extends="struts-default"><!-- 全局返回结果 --><global-results><result name="error" type="error">/WEB-INF/jsp/error.jsp</result><result name="sysError">/WEB-INF/jsp/error.jsp</result><result name="input">/WEB-INF/jsp/error.jsp</result></global-results>
<!-- 全局异常映射 --><global-exception-mappings><exception-mapping result="sysError" exception="cn.itcast.core.exception.SysException"></exception-mapping><exception-mapping result="input" exception="java.lang.Exception"></exception-mapping></global-exception-mappings></package>

在struts配置后,会有struts的拦截器拦截。所以在配置好异常页面后,可以在action中写方法时抛出异常,交给struts拦截并处理

可以这么理解这个流程:

>我们在action中的方法遇到异常后,抛出相应的异常xxxException

>struts拦截获取到这个异常,根据获取的异常的类型,在<global-exception-mapping>中,看有没有这个类型的异常

>有这个类型的异常,再去获取<global-exception-mapping>配置的result叫什么

>没有这个类型的异常,看有没有父类异常(一般都会配置个Exception,保证其他类异常能够处理到),同样获取配置的result叫什么

>根据获得的result值去<global-results>中找叫这个名字的result,获得标签体内的跳转路径

所以,我们可以自己写异常类,比如action层一个异常类、service层一个异常类、dao层一个异常类,每个类对应不同的result,跳转到不同的提示页面,我们就能知道是那个部分出问题了。


再有些特殊情况的补充,有时候没有异常但是有错误信息等,我们需要处理这些错误信息,就要写一个类继承StrutsResultSupport。

<!-- 配置全局结果及异常映射 --><package name="base-default" extends="struts-default"><!-- 返回结果类型 --><result-types><result-type name="error" class="cn.itcast.core.action.SysResultAction"></result-type></result-types><!-- 全局返回结果 --><global-results><result name="error" type="error">/WEB-INF/jsp/error.jsp</result><result name="sysError">/WEB-INF/jsp/error.jsp</result><result name="input">/WEB-INF/jsp/error.jsp</result></global-results><!-- 全局异常映射 --><global-exception-mappings><exception-mapping result="sysError" exception="cn.itcast.core.exception.SysException"></exception-mapping><exception-mapping result="input" exception="java.lang.Exception"></exception-mapping></global-exception-mappings></package>

这个配置相比上面就多了 <!-- 返回结果类型--> 的三行

实际上我们是自定义了result的类型。struts自带的result有10种类型。(json类型不是自带的,需要导包,也是自定义的)

所以为了便于理解,拿常见的result举例:

<result name="error" type="dispatcher">/WEB-INF/jsp/error.jsp</result>

 上面这是表示转发类型,将后面的地址转发处理

<result name="error" type="redirect">/WEB-INF/jsp/error.jsp</result>

上面表示是重定向类型,地址重定向访问

同理

<result name="error" type="error">/WEB-INF/jsp/error.jsp</result>

就是按自定义的error类型进行处理,具体处理流程要找error这个type对应的类,这个类是自定义的,里面可以进行自定义的处理。我的理解是发生了未知的错误,可以这么用,(不是异常,异常会被我设置的exception类型捕获),在自定义的类中写一段发送错误报告的代码,然后转发或重定向到页面。


解决这个问题的过程中,为了能理清楚配置的意思,以及配置完成后的执行流程(能更好的理解为什么这么配置)。查阅了如下资料:

参考:

http://www.tuicool.com/articles/eeIr2e

http://lydia-fly.iteye.com/blog/2013736


0 0
原创粉丝点击