(17)Struts2_异常处理: exception-mapping 元素
来源:互联网 发布:ug编程教学 编辑:程序博客网 时间:2024/05/14 02:34
异常处理: exception-mapping 元素
在action方法中添加
int i=1/0;
请求action后,结果为:
在struts.xml中添加异常处理:exception-mapping元素
<action name="czy_save" class="com.qbz.struts2_02.GG_CZY" method="save"> <exception-mapping result="ArithmeticException" exception="java.lang.ArithmeticException"></exception-mapping> <result name="ArithmeticException">/WEB-INF/page/Input.jsp</result> <result name="save">/WEB-INF/page/Show.jsp</result> </action>
此时,页面将直接跳转到Input.jsp:
在Input.jsp加入标签显示exception信息:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> </head> <body> <form action="czy_save.action" method="post"> <s:debug></s:debug><br> <s:property value="exception"/><br> <s:property value="exception.message"/><br> 编号:<input type="text" name="dlh"/><br> 姓名:<input type="text" name="name"/><br> 部门:<input type="text" name="bmmc"/><br> <input type="submit" value="保存"/> </form> </body></html>
请求action后的页面效果:
点击 Debug :
可见,对象栈的 栈顶 是异常对象,所以在上面页面没用下标就直接读取属性。ExceptionHolder有两个属性,一个是exceptionStack,一个是exception。
我们来看,Struts2是如何做到异常映射处理的。
在struts_default.xml中查看:
我们的package的父类struts-default中引用的默认拦截器
<default-interceptor-ref name="defaultStack"/>
ctrl+shift+t 查看 ExceptionMappingInterceptor 源码
public class ExceptionMappingInterceptor extends AbstractInterceptor { //省略...... @Override public String intercept(ActionInvocation invocation) throws Exception { String result; try { result = invocation.invoke(); } catch (Exception e) { if (isLogEnabled()) { handleLogging(e); } List<ExceptionMappingConfig> exceptionMappings = invocation.getProxy().getConfig().getExceptionMappings(); ExceptionMappingConfig mappingConfig = this.findMappingFromExceptions(exceptionMappings, e); if (mappingConfig != null && mappingConfig.getResult()!=null) { Map parameterMap = mappingConfig.getParams(); // create a mutable HashMap since some interceptors will remove parameters, and parameterMap is immutable invocation.getInvocationContext().setParameters(new HashMap<String, Object>(parameterMap)); result = mappingConfig.getResult(); publishException(invocation, new ExceptionHolder(e)); } else { throw e; } } return result; } //省略...... /** * Default implementation to handle ExceptionHolder publishing. Pushes given ExceptionHolder on the stack. * Subclasses may override this to customize publishing. * * @param invocation The invocation to publish Exception for. * @param exceptionHolder The exceptionHolder wrapping the Exception to publish. */ protected void publishException(ActionInvocation invocation, ExceptionHolder exceptionHolder) { invocation.getStack().push(exceptionHolder); }}
可见,当catch到异常之后publishException(invocation, new ExceptionHolder(e))把异常压入了栈中。
每个action是不是都要配置异常处理呢?当然不用,下面来看global-exception-mappings、global-results 。
在struts.xml中配置如下:
<global-results> <result name="ArithmeticException">/WEB-INF/page/Input.jsp</result> </global-results> <global-exception-mappings> <exception-mapping result="ArithmeticException" exception="java.lang.ArithmeticException"></exception-mapping> </global-exception-mappings>
0 0
- (17)Struts2_异常处理: exception-mapping 元素
- 声明式异常处理: exception-mapping 元素
- struts2声明式异常处理(异常处理: exception-mapping 元素)
- struts2中的exception-mapping声明时异常处理
- Struts2_声明式异常处理
- Struts2_声明式异常处理_实现
- 9.struts2_声明式异常处理
- 10.struts2_声明式异常的处理
- Exception(异常处理)
- Exception异常处理
- Oracle Exception 异常处理
- java异常处理Exception
- Java异常处理Exception
- python Exception 异常处理
- 【java】 异常处理 exception
- java异常处理Exception
- Java - 异常(Exception)处理
- 异常处理(Exception)
- codeforces 710e
- Sorting Algorithm-Quick Sort
- Spring-mvc与shiro配置遇到的问题
- 图论之最短路入门
- urllib2下载网页的三种方法_Python爬虫
- (17)Struts2_异常处理: exception-mapping 元素
- 回溯法与分支限界算法
- tjut 2089
- Windows系统基础上安装Linux
- C#中调用Halcon导出类
- 模块加载失败 请确保该二进制文件在指定的路径中 找不到指定的模块
- Redux 简明教程
- bzoj3122: [Sdoi2013]随机数生成器
- 只更新数据库部分字段数据的方法