struts的异常处理

来源:互联网 发布:大数据技术应用难吗 编辑:程序博客网 时间:2024/05/01 07:03

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

编程式异常处理

即我们在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的功能


原创粉丝点击