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

本文介绍了如何在Struts中配置全局异常处理,包括理解异常处理流程、配置全局异常映射和结果,并展示了自定义返回类型的方法。通过创建不同异常类对应不同提示页面,可以定位问题所在。同时,讲解了dispatcher、redirect和自定义error类型result的使用,并提到自定义错误报告发送功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

贴配置

	<!-- 配置全局结果及异常映射 -->
	<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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值