Struts2使用24 -- 异常处理
来源:互联网 发布:票拟 知乎 编辑:程序博客网 时间:2024/06/09 23:46
在开发web应用时,需要处理不同种类的异常。有些异常是特定于服务或者正在调用的业务对象的——这些无法进行声明式处理,只能通过编程来处理它们。但是还有另外一些异常:
l 无法处理,需要把用户重定向到一个错误页面,直到问题解决为止。这些常常是系统级别或者资源级别的问题,和Web应用的逻辑无关。因网络问题而导致的数据库连接失败就是这样一个例子。
l 与逻辑无关,但是需要对用户重定向到执行额外操作的页面。比如说,如果用户在未登录的情况下来访问一个web页面,就可能因为安全问题而抛出异常。当用户登录以后,他们就可以继续操作了。
l 与逻辑相关,可以通过修改用户的工作流程解决。这种问题常常是与资源相关的,包括唯一约束冲突的异常,对数据并发修改或是资源锁问题等等。
这些异常都可以进行声明式管理,无需修改Action。
当一个异常可能会被应用中的所有Action抛出时,它应该被声明为全局异常。全局异常在“struts.xml”文件中进行声明,它位于<package … >标签下的<global-exception-mappings … />标签里面。
<global-exception-mappings>
<exception-mapping result="sqlException"
exception="java.sql.JDBCConnectionException"/>
<exception-mapping result="unknownException" exception="java.lang.Exception"/>
</global-exception-mappings>
在<global-exception-mappings … />中,<exception-mapping … />标签的数量是没有限制的。标签中的每一个映射都包含两个属性——“exception”属性定义了异常类的全限定名,“result”标签定义了重定向的结果。
每一个异常映射都会按照被配置的顺序来进行检索。当检索到一个匹配的异常(或它的子类)时,处理过程就会终止,页面请求就会被转发给先前映射的结果。否则就会按照配置顺序向下继续检索能够匹配的异常。
如果一个异常的作用域只是单个的action,那么就在<action … />标签内进行同样的<exception-mapping … />标签配置。
<action name="my" class="MyAction" >
<result>view.jsp</result>
<interceptor-ref name="basiActioncStack"/>
<exception-mapping result="exists" exception="ConstraintViolationException" />
</action>
这里的属性和全局异常的属性相同。如果在action级别上没有找到匹配的异常映射,那么就会从全局异常的定义中检索相应的异常。
同时,你还应该保证拦截器栈中要有“exception”拦截器,并对需要进行声明式异常处理的Action进行配置。在默认情况下,Struts2提供的所有拦截器栈都包含有“exception”拦截器。
在对抛出异常时的结果进行修改的同时,“exception”拦截器也在值栈中添加了两个元素,用以提供异常信息。
名称
描述
exception
所抛出的异常对象
exceptionStack
stack trace的字符串值
这些值可以用来向用户显示异常的堆栈信息,或是显示一些友好的用户提示信息,或者是重新组织页面布局,显示额外的数据项,并可以再次提交表单。
- Struts2使用24 -- 异常处理
- struts2使用 displaytag 分页异常的处理
- struts2使用 displaytag 分页异常的处理
- Struts2异常处理机制的使用(八)
- struts2异常处理
- struts2异常处理
- struts2异常处理
- struts2异常处理
- struts2异常处理
- struts2中的异常处理
- struts2 异常处理总结
- struts2中的异常处理
- Struts2异常处理
- struts2 异常处理总结
- struts2 异常处理总结
- struts2异常处理
- struts2异常处理机制
- struts2 异常处理总结
- 自编一个简单的Web菜单
- Struts2使用22 -- 注解配置4 -- 转换器注解
- 以结果为导向的销售执行力
- Qt学习之路:初探信号槽
- Struts2使用23 -- 国际化
- Struts2使用24 -- 异常处理
- Bookmark & Share
- 第一篇test
- 软考 网络工程师(第三版) 前言及目录
- Hadoop安装部署[原作者wayne1017]
- [转]使用ViewModel模式来简化WPF的TreeView
- 协议连接建立时3次握手的过程4次结束连接
- Struts2使用25 -- 声明
- Fibonacci数列(兔子繁殖问题)