Struts2之异常机制
当一个Action类抛出一个异常时,Struts2采用声明式的策略即异常映射匹配来处理异常。核心处理思想就是都某个Action的方法执行时抛出异常对象,该异常对象可以被Struts2的异常拦截器自动捕获,并映射到预定义结果视图;由于在struts-default.xml中已经激活异常映射功能,所以作为开发者而言,要做的仅仅是定义异常映射到指定的结果集;
当异常发生时,拦截器会以检查局部异常然后全局异常的顺序,检查所有可以应用于当前Action的异常映射,在所有抛出和声明的异常中寻找与抛出异常对象最接近的异常类型,如果类型匹配,则执行对应的结果,跳转到结果对应页面;
看下面一个简单的例子:
package com.ognl.action;import com.opensymphony.xwork2.ActionSupport;public class ExceptionAction extends ActionSupport {@Overridepublic String execute() throws Exception {int a = 1 / 0;return SUCCESS;}
}
然后看struts.xml配置
<global-results><result name="ArithmeticException">/exception.jsp</result></global-results><global-exception-mappings><exception-mapping result="ArithmeticException" exception="java.lang.ArithmeticException"/></global-exception-mappings><action name="exception" class="com.ognl.action.ExceptionAction"><result name="success">/hello.jsp</result></action>
当执行ExceptionAction的execute方法时,会抛出ArithmeticException异常,于是首先回到Action内部,去寻找是否有匹配的异常映射,没有找到后接着去全局异常映射中寻找匹配项,找到后然后跳转到对应的异常页面;
再看一个稍微绕一点的例子:
<global-results><result name="login" type="redirect">/Login.action</result><result name="Exception">/Exception.jsp</result>
</global-results><global-exception-mappings><exception-mapping exception="java.sql.SQLException" result="SQLException"/><exception-mapping exception="java.lang.Exception" result="Exception"/>
</global-exception-mappings>
...
<action name="DataAccess" class="com.company.DataAccess"><exception-mapping exception="com.company.SecurityException" result="login"/><result name="SQLException" type="chain">SQLExceptionAction</result><result>/DataAccess.jsp</result>
</action>
以上配置信息我们可以得出:
1、一个java.sql.SQLException将要链到SQLExceptionAction
2、一个com.company.SecurityException 将要重定向到Login.action
3、其它异常将会请求转发到Exception.jsp页面
如果要在异常页面显示错误信息,该如何显示呢?
一般来说,ExceptionmappingInterceptor 将下列信息添加到ActionContext的Value Stack中
exception | 异常对象本身 |
exceptionStack | 栈轨迹详细信息 |
既然如此,我们就可以通过OGNL的方式会获取它
<h2>An unexpected error has occurred</h2>
<p>Please report this error to your system administrator orappropriate technical support personnel. Thank you for yourcooperation.</p>
<hr />
<h3>Error Message</h3>
<s:actionerror />
<p><s:property value="%{exception.message}" />
</p>
<hr />
<h3>Technical Details</h3>
<p><s:property value="%{exceptionStack}" />
</p>
Struts2这种声明似的异常处理方式,在Hibernate也较为常见,该处理方式简洁明了,关键在于如何弄懂它的核心处理规则,以后即使在复杂的异常处理也不怕!
Struts2之异常机制相关推荐
- Python培训教程分享:Python异常机制
在学习Python技术的时候,我们经常会遇到一些异常,例如导致程序在运行过程中出现的中断或退出,我们都称之为异常,大多数的异常都不会被程序处理,而是以错误信息的形式展现出来.本期Python培训教 ...
- Java异常之异常机制
2019独角兽企业重金招聘Python工程师标准>>> Java异常处理机制依赖5个关键字try,catch,finally,throw,throws.try关键字后跟着可能出现异常 ...
- C# Note34: 异常机制相关小点
1.使用throw和throw ex抛出异常的区别 通常,我们使用try/catch/finally语句块来捕获异常,那么在抛出异常的时候,使用throw和throw ex有什么区别呢? 假如,按顺序 ...
- java的异常机制面试题(转)
java的异常机制面试题(转) 参考文章: (1)java的异常机制面试题(转) (2)https://www.cnblogs.com/ffaiss/p/11434639.html 备忘一下.
- Java异常机制及异常处理建议
Java异常机制及异常处理建议 参考文章: (1)Java异常机制及异常处理建议 (2)https://www.cnblogs.com/wangxilei/p/9522259.html 备忘一下.
- C++ 异常机制分析
C++ 异常机制分析 参考文章: (1)C++ 异常机制分析 (2)https://www.cnblogs.com/QG-whz/p/5136883.html 备忘一下.
- 全面理解java异常机制
在理想状态下,程序会按照我们预想的步骤一步一步的执行,但是即使你是大牛,你也不可避免出错,所以java为我们提供了异常机制.本文将会从以下几个方面介绍java中的异常机制: 异常机制的层次结构 异常的 ...
- Java异常处理及异常机制介绍
Java异常处理及异常机制介绍 当出现程序无法控制的外部环境问题(用户提供的文件不存在,文件内容损坏,网络不可用...)时,JAVA就会用异常对象来描述. JAVA中用2种方法处理异常: 1.在发生异 ...
- Java的知识点19——异常机制Exception
异常(Exception)的概念 异常指程序运行过程中出现的非正常现象,例如用户输入错误.除数为零.需要处理的文件不存在.数组下标越界等. Java是采用面向对象的方式来处理异常的.处理过程: 1. ...
最新文章
- 模生物嗅觉的神经算法,能让电脑芯片识别气味
- Java日志框架Slf4j+Log4j入门
- 8.8-9 fsck、dd
- 从根本上了解异步编程体系
- 创建一个最简单的imgui测试用例
- .net core 杂记:用Autofac替换内置容器
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
- 合成创意海报灵感|比技术更重要的是创意!
- ORACLE 语句关联统计
- 特征向量的辨析(数学,机器学习)
- [转]对当前自然语言处理方法论中的一个疑惑
- IT餐馆—第一回 前言
- spring mvc国际化_Spring MVC国际化(i18n)和本地化(L10n)示例
- 下岗工人到达退休年龄,养老保险未缴纳满15年,补缴合适吗?
- 传智播客java学习之面向对象(抽象类) , 接口
- 抢红包插件实现原理浅析
- 实现支付代付批量转账接口
- Abaqus有限元分析软件介绍
- Semantic Proximity Search on Heterogeneous Graph by Proximity Embedding
- 简述c++语言的特点(优点)
热门文章
- jQuery实现 div里面的文字如何自动缩小,避免文字溢出
- 7-2 jmu-Java-02基本语法-05-浮点数的精确计算 (1 分)
- 查找链表中倒数第k个结点(C++)
- java项目分页_Java项目实战分页类
- java程序员的日常_Java程序员的日常——经验贴(纯干货)
- as3中splice和slice的用法
- Linux下open函数、read函数、write函数记录
- 项目部署到weblogic后页面乱码问题
- 602. Friend Requests II: Who Has Most Friend?
- linux输入子系统