在struts2应用程序中你还在使用try catch语句来捕获异常么?如果是这样的,那你OUT啦!struts2支持声明式异常处理,可以再Action中直接抛出异常而交给struts2来处理,当然需要我们在xml文件中配置,由于抛出同样的异常的处理方法通常都一样,所以如果能在xml中配置全局异常,将会使得开发便捷性大大提高。
以前的异常捕获可能是这样的:
/**
* 执行更新
*
* @return
*/
public String update() {
Article article = new Article();
article.setContent(content);
article.setTitle(title);
article.setId(id);
try {
articleService.update(article);
return SUCCESS;
} catch (SQLException e) {
e.printStackTrace();
return ERROR;
} catch (InvalidInputException e) {
e.printStackTrace();
System.out.println( "输入非法" );
return ERROR;
}
} |
这种方式是完全的手动处理异常,一来不够简洁明快,而且还不容易维护,毕竟如果修改了这些代码都需要再次编译。
采用struts2的声明式异常处理就会简单很多了。
首先,上面的代码的try catch 就可以全都不要了,但是,当然,得新加throw语句抛出异常:
/**
* 执行更新
*
* @return
* @throws InvalidInputException
* @throws SQLException
*/
public String update() throws SQLException, InvalidInputException {
Article article = new Article();
article.setContent(content);
article.setTitle(title);
article.setId(id);
articleService.update(article);
return SUCCESS;
} |
代码清晰了很多,不是么?
捕获异常的任务则交给xml配置文件了,配置文件还是比较容易理解的:
< package name="wow" extends="struts-default">
< global-results >
< result name="sql">/internal_Error.jsp</ result >
< result name="invalidinput">/invalid_Input.jsp</ result >
< result name="naming">/internal_Error.jsp</ result >
</ global-results >
< global-exception-mappings >
< exception-mapping result="sql" exception="java.sql.SQLException"></ exception-mapping >
< exception-mapping result="invalidinput"
exception="cn.codeplus.exception.InvalidInputException"></ exception-mapping >
< exception-mapping result="naming"
exception="javax.naming.NamingException"></ exception-mapping >
</ global-exception-mappings >
< action name="*_*" class="cn.codeplus.action.{2}Action" method="{1}">
< result name="success">/{1}_{2}_success.jsp</ result >
< result name="error">/{1}_{2}_error.jsp</ result >
<!--<exception-mapping result="sql" exception="java.sql.SQLException"></exception-mapping>-->
</ action >
</ package >
|
用于异常处理的<exception-mapping>标签可以配置在Action中,也可以配置在<global-exception-mappings>,顾名思义<global-exception-mappings>就是全局异常,当然执行Action的时候发生异常时,如果在Action中没有捕获异常而是抛出异常的话,struts2会首先在正在执行的Action中查找<exception-mapping>,寻找对应的Exception进行处理,如果找不到,才会去<global-exception-mappings>去寻找对应的Exception处理,如果还是找不到的话,就只好抛出异常了。
下面说说异常处理:
< exception-mapping result="sql" exception="java.sql.SQLException"></ exception-mapping >
|
上面代码说明,当捕获java.sql.SQLException时候,去寻找对应的result为sql的视图返回,即<global-result>中name为sql的result去返回internal_Error.jsp。当然如果<exception-mapping>配置在action中的话,则会首先去action的result搜寻返回视图,失败了才会去搜寻<global-result>。
在我们编写上面的xml配置的时候可能会遇到如下错误:
这个是因为,我们xml配置文件各个标签<action>、<global-result>、<global-exception-mapping>的顺序不对,调整一下标签的顺序,符合黄色的提示语即可。
最后,我们说说视图层怎样获取异常信息,invalid_Input.jsp文件是这样的:
... <%@taglib prefix="s" uri="/struts-tags"%> ... < body >
< jsp:include page="nav.jsp"></ jsp:include >
< div >
抱歉,服务器内部错误。
</ div >
< div >
< s:property value="exception.message"/>
</ div >
< s:debug ></ s:debug >
</ body >
... |
< s:property value="exception.message"/>表示从valuestack中获取错误信息,显示在前台页面上。当然,我们也可以选择更人性化得处理方案,比如说,放个失望的表情,写上“抱歉,服务器内部错误,您可以发邮件给我们提示此错误,xxxx@xxxx.com”等等;
|
经测试,当发生SQLException的时候,页面信息如下: |
好了,很高兴来到园子,嘿嘿,希望这篇文章对大家有用。
转自:http://www.cnblogs.com/codeplus/archive/2011/07/16/2107999.html
相关推荐
在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使用拦截器机制处理请求,提供了强大的功能如文件上传、异常处理等。 - **类型转换和验证**:自动进行表单数据的类型转换,并且可以自定义验证规则,确保数据的正确性。 - **国际化**:支持多...