在struts2应用程序中我们可以使用使用try catch语句来捕获异常,而后对异常进行处理,最后使用return 一个控制符告诉struts转到对应的视图;而另一方面struts2支持声明式异常处理,它是通过拦截器(interceptor)来处理声明式异常的,我们可以在Action中直接抛出异常而交给struts2来处理,当然,这需要我们在DAO、Service、Action层都需要抛出相应的异常,然后再在struts2的xml文件中配置,由于抛出同样的异常的处理方法通常都一样,所以如果能在xml中配置全局异常,将会使得开发便捷性大大提高。
以前的异常捕获可能是这样的:
/** * New User Register * @return */ public String add() { if(!Common.isEmpty(user)){ try { userService.add(user); return SUCCESS; } catch (SQLException e) { e.printStackTrace(); return ERROR; } catch (InvalidInputException e) { e.printStackTrace(); System.out.println("An Error occur when adding a user"); return ERROR; } } }
采用struts2的声明式异常处理:
首先,上面的代码的try catch 就可以全都不要了,但是,得在方法上新加throws语句告诉struts程序可能会抛出的异常:
/** * New User Register * @return */ public String add() throws SQLException,InvalidInputException{ if(!Common.isEmpty(user)){ userService.add(user); return SUCCESS; } }
捕获异常的任务就完全交给struts了。需要配置。配置文件还是比较容易理解的:
<package name="admin" extends="struts-default"> <global-results> <result name="sql">/error.jsp</result> <result name="invalidinput">/inputError.jsp</result> </global-results> <global-exception-mappings> <exception-mapping result="sql" exception="java.sql.SQLException" /> <exception-mapping result="invalidinput" exception="com.user.exception.InvalidInputException" /> </global-exception-mappings> <action name="user_*" class="userAction" method="{1}"> <result >/index.jsp</result> <result name="error">/error.jsp</result> <!--<exception-mapping result="sql" exception="java.sql.SQLException" />--> </action> </package>
* exception: 异常类型
* result:指定Action出现该异常时,系统转入result属性所指向的结果。
如上所述,我们看到在package中有global-result和global-exception-mapping配合起来使用的,也有放在action中单独使用的exception-mapping (注释部分),读者可根据情况选择使用
需要说明的是,
- 使用global-exception-mapping必先定义好global-result,否则编译器会报错;
- 如若出现异常,struts2会先查找action中的exception-mapping,如果找到对应的结果则返回,如果找不到则查找global-exception-mapping;
- 如果局部(当前)Action、和全局结果集存在相同的<result>,则使用最近的那个结果
异常的组织与分类:
所有业务异常类派生于自定义的BaseException基类。
- 原则上,要进行相同处理的异常分为一类,用ERROR_CODE标识不同。
- 出错信息统一写在errors.properties,以ERROR_CODE为主键,支持i18N,由基类提供默认的getMessage()函数。
- Servlet规范里的异常控制
- 按error-code统一定义错误页面,404.jsp/error.jsp 按异常类型定义单独错误页面
其中jsp的异常在exception 变量中.
servlet的异常在(Exception)request.getAttribute("javax.servlet.error.exception")
spring的异常在(Exception) request.getAttribute("exception")
使用 (String) request.getAttribute("javax.servlet.error.request_uri")获得 request_uri
使用 logger.error(exception.getMessage(), exception); 记录整个异常栈
相关推荐
在Struts2中,声明式异常处理是其强大的特性之一,它允许开发者通过配置文件来定义不同类型的异常如何被处理,而不是在每个动作类中进行硬编码。这样可以提高代码的可读性和可维护性,同时也方便了异常处理策略的...
Struts2是一个强大的Java web开发框架,它提供了一种声明式异常处理机制,极大地简化了在应用程序中处理异常的方式。本示例代码旨在演示如何在Struts2中定义和使用声明式异常,以及如何访问异常属性。 声明式异常...
声明式异常处理是Struts通过配置文件(如struts-config.xml或struts2的struts.xml)来定义异常的路由策略。在这些配置文件中,我们可以指定当特定类型的异常发生时,应该转发到哪个JSP页面或者Action。这样,当程序...
7. **表单验证**:Struts2提供了强大的表单验证功能,可以在Action类中定义验证规则,或者使用XML配置文件进行声明式验证。 通过这个新闻管理系统,新手可以学习到如何使用Struts2搭建一个完整的web应用,包括控制...
9. **异常处理**:Struts2提供了一套全面的异常处理机制,通过配置`<global-exception-mappings>`标签,可以定义全局的异常处理策略。 在"struts2lib"这个压缩包中,可能包含的文件有`struts2-core.jar`(核心库)...
- **Struts2**:支持注解和XML方式的校验,可以实现声明式校验,减少了代码量并提高了可维护性。 7. 国际化和本地化: - **Struts1**:需要手动配置资源文件,处理相对复杂。 - **Struts2**:提供了一套更直观的...
7. **异常处理**:Struts2提供了一套完整的异常处理机制,可以通过配置文件定义不同类型的异常对应的结果,使得错误页面显示更友好。 8. **国际化(Internationalization, i18n)**:Struts2支持多语言,通过资源包...
8. **异常处理**:Struts2提供了全局和局部的异常处理机制,可以自定义错误页面和异常处理逻辑,确保应用程序的健壮性。 9. **国际化支持**:通过资源文件,Struts2可以轻松实现多语言支持,为不同地区的用户提供...
常见的拦截器有Params(参数校验)、Validation(表单验证)、Exception(异常处理)等。 5. **结果类型(Result Types)**:Struts2支持多种结果类型,如dispatcher(用于转发到JSP页面)、stream(用于下载文件)和...
Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中广泛应用,极大地简化了创建交互式、数据驱动的Web应用程序的过程。这个“struts2标准jar包集”包含了运行和集成Struts2框架所需的核心库和其他...
本文将深入探讨Struts2的异常处理机制,特别是声明式异常捕捉和异常映射。 首先,Struts2的异常处理机制允许开发者在不干扰Action执行逻辑的情况下,集中处理可能出现的异常。默认情况下,由于Action的`execute()`...
Spring的依赖注入(DI)使得我们可以轻松管理对象的生命周期和依赖关系,同时,它还提供了事务管理,如使用@Transactional注解进行声明式事务管理。 Hibernate的配置文件(通常是hibernate.cfg.xml)会定义数据库...
SSH中的Spring框架则是Java企业级应用的核心组件,它提供了一种声明式事务管理方式,可以简化事务处理。Spring的IoC容器负责管理对象的生命周期和对象间的依赖关系,而AOP则用于实现代码的横向切面,如日志记录、...
这些核心库的引入,使得开发者可以充分利用Struts2的特性,如声明式异常处理、国际化支持、插件扩展性、以及强大的表单验证和数据绑定等功能。在实际开发中,还需要根据具体需求引入其他的库,如数据库连接池、JSON...
- **声明式异常处理**:通过配置文件来处理异常,提高代码的健壮性。 #### 8. 国际化支持 - **资源文件**:通过定义资源文件来支持多语言。 - **格式化**:根据不同的语言和地区设置,自动调整日期、数字等格式。 ...
6. **异常处理**:Struts2提供了全局异常处理机制,可以捕获并处理运行时异常。在struts.xml中配置全局异常映射,定义不同类型的异常对应的结果页面,提高应用的健壮性。 7. **视图渲染**:在JSP页面中,通常使用...
- **拦截器**:Struts2使用拦截器机制处理请求,提供了强大的功能如文件上传、异常处理等。 - **类型转换和验证**:自动进行表单数据的类型转换,并且可以自定义验证规则,确保数据的正确性。 - **国际化**:支持多...