在struts的核心jar当中我们可以找到struts-default.xml配置文件。
一个请求到来首先会被StrutsPrepareAndExecuteFilter过滤,在其中会调用action。struts拦截器就是在调用action之前会调用interceptor,然后interceptor再调用action。
在Struts2里面,我们的异常的处理就是被一个拦截器实现。我们配置package,它的父类都来源于struts-default.xml,在struts-default配置了很多拦截器,我们所有的action都会被这些拦截器过滤,在其中我们也可以找到处理异常的拦截器ExceptionMappingInterceptor。
声明式异常处理原理:action抛出了异常会被ExceptionMappingInterceptor捕捉到。ExceptionMappingInterceptor处理异常的逻辑看后面源码:
让我们来看ExceptionMappingInterceptor中部分源码:
public String intercept(ActionInvocation invocation) throws Exception { String result; try { result = invocation.invoke();//在这里面会调用action,如果action抛出了异常,会被捕捉到 } catch (Exception e) { if (isLogEnabled()) { handleLogging(e); } //获取struts.xml配置文件中配置的Exception Mapping,返回的是一个List List<ExceptionMappingConfig> exceptionMappings = invocation.getProxy().getConfig().getExceptionMappings(); //在集合List中是否存在action抛出这个异常,如果存在,返回Exception Mapping 对应result String mappedResult = this.findResultFromExceptions(exceptionMappings, e); if (mappedResult != null) {//看result是否为null result = mappedResult; publishException(invocation, new ExceptionHolder(e));//把异常的信息放入Value Stack中 } else { throw e; } } return result; }
相关推荐
该版本主要改进了性能和兼容性,引入了新的拦截器和过滤器,增强了异常处理机制,以及对Java EE 7的支持。Struts 2通过Action、Result和Interceptor等组件,使得业务逻辑和视图层解耦,简化了控制器层的编写,同时...
8.8 映射异常视图 312 8.8.1 问题 312 8.8.2 解决方案 312 8.8.3 工作原理 312 8.9 用@Value在控制器中赋值 314 8.9.1 问题 314 8.9.2 解决方案 314 8.9.3 工作原理 314 8.10 用控制器处理表单 ...
8.8 映射异常视图 312 8.8.1 问题 312 8.8.2 解决方案 312 8.8.3 工作原理 312 8.9 用@Value在控制器中赋值 314 8.9.1 问题 314 8.9.2 解决方案 314 8.9.3 工作原理 314 8.10 用控制器处理表单 ...
10.1 Optional类:避免空指针异常,增强代码可读性。 10.2 Date/Time API:替换旧的日期时间API,提供更强大和易用的功能。 10.3 Method Reference:简化方法引用,使得代码更加简洁。 张龙的Java SE课程笔记详尽地...
6.1 **异常捕获**:规定了如何正确地捕获和处理异常,避免使用空异常处理块,提倡提供具体的异常信息。 6.2 **自定义异常**:在必要时创建自定义异常类型,以增强代码的可读性和异常处理的精确性。 **第7章 数据库...
1.4 JSP的工作原理:请求-处理-响应模型,以及编译和执行过程。 **第2章:环境搭建** 2.1 安装JDK:Java Development Kit是运行JSP的基础。 2.2 安装Web服务器:如Tomcat,Apache等,用于部署和运行JSP应用程序。 ...
6.2 异常处理:通过try-catch-finally语句块捕获和处理异常,finally块确保资源的正确释放。 七、面向对象特性 7.1 封装:通过访问控制和抽象类,隐藏对象的内部细节,只暴露必要的接口。 7.2 继承:子类继承父类...
#### 10.1 Java异常处理 异常处理是Java中处理程序错误的一种机制,通过`try-catch-finally`语句块来捕获和处理异常。 #### 10.2 认识异常 异常是指程序在执行过程中发生的意外情况,可以分为编译时异常和运行时...
3. **异常处理**:Java提供了异常处理机制,通过try-catch-finally语句块来捕获和处理运行时错误,确保程序的健壮性。 4. **集合框架**:Java集合框架包括接口(如List、Set、Map)和实现类(如ArrayList、HashSet...
10.1 设计模式:学习常用的23种设计模式,理解其应用场景和实现原理。 10.2 小型项目:通过实际项目加深对Java技术的理解,提升编程能力。 本教程"Java从入门到精通"全面覆盖了Java语言的核心内容,适合初学者系统...
27.4.1 协作式取消的原理 578 27.4.2 使用aggregateexception类处理任务异常 586 27.4.3 为canceled和faulted任务使用延续任务 589 第27章快速参考 590 第28章 执行并行数据访问 593 28.1 用plinq并行进行声明...
4.2 异常处理机制:学习try-catch-finally结构,以及throw和throws关键字的使用。 4.3 自定义异常:如何创建和使用自定义异常类。 五、集合框架 5.1 集合概述:认识ArrayList、LinkedList、HashSet、HashMap等常用...
4.2 异常处理结构:try-catch-finally与throw关键字的用法。 4.3 自定义异常:如何定义和使用自定义异常类。 五、集合框架 5.1 集合接口:List、Set、Queue等接口的特性与用途。 5.2 序列化与反序列化:了解对象...
9.7. 选择编程式事务管理还是声明式事务管理 9.8. 与特定应用服务器集成 9.8.1. BEA WebLogic 9.8.2. IBM WebSphere 9.9. 公共问题的解决方案 9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多...
13.3.3声明式事务处理 267 13.3.4标注式事务处理 268 13.4项目实战——公司人事管理 269 本章小结 276 课后练习 276 第14章spring与struts2、hibernate框架的整合基础 277 14.1spring与struts2的整合方式 277...
- 数组下标越界异常等常见异常的处理。 - **5.6 数组复制** - 数组复制的不同方法。 - **5.7 数组排序** - 使用 Arrays.sort() 方法进行排序。 - **5.8 多维数组** - 二维数组、三维数组等的定义及使用。 - **...
10.3.1 使用throws声明抛出异常 367 10.4 使用throw抛出异常 369 10.4.1 抛出异常 369 10.4.2 自定义异常类 371 10.4.3 catch和throw同时使用 371 10.4.4 异常链 373 10.5 Java的异常跟踪栈 374 10.6 异常...
- **异常处理:** 正确地使用try-catch-finally结构来处理异常。 - **代码复用:** 尽量复用已有的代码,减少重复编写相似功能的代码。 - **代码审查:** 定期进行代码审查可以帮助发现潜在的问题并及时修正。 ####...
9.7. 选择编程式事务管理还是声明式事务管理 9.8. 与特定应用服务器集成 9.8.1. BEA WebLogic 9.8.2. IBM WebSphere 9.9. 公共问题的解决方案 9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多...