struts的异常处理

异常跟国际化的处理有着很大的关系

编程式异常处理

即我们在Action中调用业务逻辑层对象的方法时,用try{ }catch的方式来截获异常之后,手工对异常进行处理我们以前的开发过程中,都是使用编程式的异常处理

在编程式异常处理的时候,我们可以使用struts的消息处理机制(前面所讲的内容)来对这些异常信息进行处理

* 在Action中截获异常
* 创建相应的异常消息
* 传递异常消息
* 转向相应的页面取得异常


自动异常处理机制
即在Action中不捕捉异常,而是将异常抛出给struts框架处理
我们需要在配置文件中指示struts如何处理这些被抛出的异常

使用<exception/>元素来定义自动异常处理

<exception/>元素的配置,指示了struts如何处理异常的方式
在通常的情况下,我们得到异常以后,需要将页面导航到一个错误提示的页面,提示错误信息
<exception/>元素配置的关键属性是:
key –  即这个异常所对应的错误提示消息文本的key,这个key的值,需要在资源属性文件中进行定义
type – 即定义需要处理哪种类型的Exception
path – 定义一旦出现异常,需要转向哪个页面来进行提示,如果不定义path属性,默认情况下,将使用Action配置中的input属性的值来作为转向的页面
handler - 负责异常处理的类,缺省为org.apache.struts.action.Exceptionhandler.java
     如果做个性化的异常处理可以继承此类覆盖execute方法,参见ErrorCodeExceptionHandler.java   

原理:当struts的配置文件被装载进内存的时候,异常的那块配置也是跟其他的配置信息一样被放在一个map里面的,一个异常的配置对应着一个叫ExceptionConfig类的对象,由对源代码的分析可知:excpetion配置中的path属性的优先级是比action配置中的input的高的,如果没有配这个path属性才是到这个input属性所指向的页面的,如果配了全局的异常那也是一样的!通过源码的分析得知struts也是通过把异常信息放在ActionMessages中的,如:error = new ActionMessage(ae.getKey(), ex.getMessage());//ex.getMessage()这个是用来填充那个点位符的,所以跟国际化那一块结合得比较紧密.


如何显示错误消息?
在JSP页面中,使用<html:errors/>标签,即可将其异常对应的错误消息文本进行显示(测试login.jsp页面)


如何让一个类型的异常处理所有的东西,即只配置一条exception即可,那在资源文件中只配一个如error.detail={0}即可


如何处理个性化的异常处理:如国际化资源文件中这样写:如errors.detail={0}{1}{2}...这样ex.getMessage()就不能满足填充了.

解决方法:采用跟sql的errorCode的方式,我们的异常有个errorCode,值是资源文件中的key,然后扩展struts的异常处理器.在配置文件中把exception的handler设置成我们自己的处理器类
可以肯定的是无论何种处理都需要在struts-config.xml中进行配置,除非你不使用struts的功能


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yjsuge

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值