`

Struts2的声明式异常处理

阅读更多

在struts2应用程序中你还在使用try catch语句来捕获异常么?如果是这样的,那你OUT啦!struts2支持声明式异常处理,可以再Action中直接抛出异常而交给struts2来处理,当然需要我们在xml文件中配置,由于抛出同样的异常的处理方法通常都一样,所以如果能在xml中配置全局异常,将会使得开发便捷性大大提高。

以前的异常捕获可能是这样的:

/**
* 执行更新
*
* @return
*/
publicString update() {
Article article = newArticle();
article.setContent(content);
article.setTitle(title);
article.setId(id);
try{
articleService.update(article);
returnSUCCESS;
} catch(SQLException e) {
e.printStackTrace();
returnERROR;
} catch(InvalidInputException e) {
e.printStackTrace();
System.out.println("输入非法");
returnERROR;
}
}

这种方式是完全的手动处理异常,一来不够简洁明快,而且还不容易维护,毕竟如果修改了这些代码都需要再次编译。

采用struts2的声明式异常处理就会简单很多了。

首先,上面的代码的try catch 就可以全都不要了,但是,当然,得新加throw语句抛出异常:

/**
* 执行更新
*
* @return
* @throws InvalidInputException
* @throws SQLException
*/
publicString update() throwsSQLException, InvalidInputException {
Article article = newArticle();
article.setContent(content);
article.setTitle(title);
article.setId(id);
articleService.update(article);
returnSUCCESS;
}

代码清晰了很多,不是么?

捕获异常的任务则交给xml配置文件了,配置文件还是比较容易理解的:

<packagename="wow" extends="struts-default">
<global-results>
<resultname="sql">/internal_Error.jsp</result>
<resultname="invalidinput">/invalid_Input.jsp</result>
<resultname="naming">/internal_Error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mappingresult="sql" exception="java.sql.SQLException"></exception-mapping>
<exception-mappingresult="invalidinput"
exception="cn.codeplus.exception.InvalidInputException"></exception-mapping>
<exception-mappingresult="naming"
exception="javax.naming.NamingException"></exception-mapping>
</global-exception-mappings>
<actionname="*_*" class="cn.codeplus.action.{2}Action" method="{1}">
<resultname="success">/{1}_{2}_success.jsp</result>
<resultname="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-mappingresult="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:includepage="nav.jsp"></jsp:include>
<div>
抱歉,服务器内部错误。
</div>
<div>
<s:propertyvalue="exception.message"/>
</div>
<s:debug></s:debug>
</body>
...
<s:propertyvalue="exception.message"/>表示从valuestack中获取错误信息,显示在前台页面上。当然,我们也可以选择更人性化得处理方案,比如说,放个失望的表情,写上“抱歉,服务器内部错误,您可以发邮件给我们提示此错误,xxxx@xxxx.com”等等;
经测试,当发生SQLException的时候,页面信息如下:

好了,很高兴来到园子,嘿嘿,希望这篇文章对大家有用。

 

转自:http://www.cnblogs.com/codeplus/archive/2011/07/16/2107999.html

分享到:
评论

相关推荐

    struts2之声明式异常捕捉

    在Struts2中,声明式异常处理是其强大的特性之一,它允许开发者通过配置文件来定义不同类型的异常如何被处理,而不是在每个动作类中进行硬编码。这样可以提高代码的可读性和可维护性,同时也方便了异常处理策略的...

    Struts2声明式异常示例代码

    Struts2是一个强大的Java web开发框架,它提供了一种声明式异常处理机制,极大地简化了在应用程序中处理异常的方式。本示例代码旨在演示如何在Struts2中定义和使用声明式异常,以及如何访问异常属性。 声明式异常...

    Struts 声明式异常处理和个性化异常处理

    声明式异常处理是Struts通过配置文件(如struts-config.xml或struts2的struts.xml)来定义异常的路由策略。在这些配置文件中,我们可以指定当特定类型的异常发生时,应该转发到哪个JSP页面或者Action。这样,当程序...

    struts2的新闻管理系统

    7. **表单验证**:Struts2提供了强大的表单验证功能,可以在Action类中定义验证规则,或者使用XML配置文件进行声明式验证。 通过这个新闻管理系统,新手可以学习到如何使用Struts2搭建一个完整的web应用,包括控制...

    Struts2主要Lib

    9. **异常处理**:Struts2提供了一套全面的异常处理机制,通过配置`&lt;global-exception-mappings&gt;`标签,可以定义全局的异常处理策略。 在"struts2lib"这个压缩包中,可能包含的文件有`struts2-core.jar`(核心库)...

    Struts1和Struts2区别

    - **Struts2**:支持注解和XML方式的校验,可以实现声明式校验,减少了代码量并提高了可维护性。 7. 国际化和本地化: - **Struts1**:需要手动配置资源文件,处理相对复杂。 - **Struts2**:提供了一套更直观的...

    struts2必要jar包

    7. **异常处理**:Struts2提供了一套完整的异常处理机制,可以通过配置文件定义不同类型的异常对应的结果,使得错误页面显示更友好。 8. **国际化(Internationalization, i18n)**:Struts2支持多语言,通过资源包...

    struts2框架jar包

    8. **异常处理**:Struts2提供了全局和局部的异常处理机制,可以自定义错误页面和异常处理逻辑,确保应用程序的健壮性。 9. **国际化支持**:通过资源文件,Struts2可以轻松实现多语言支持,为不同地区的用户提供...

    Struts2 教学课件

    常见的拦截器有Params(参数校验)、Validation(表单验证)、Exception(异常处理)等。 5. **结果类型(Result Types)**:Struts2支持多种结果类型,如dispatcher(用于转发到JSP页面)、stream(用于下载文件)和...

    struts2标准jar包集

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中广泛应用,极大地简化了创建交互式、数据驱动的Web应用程序的过程。这个“struts2标准jar包集”包含了运行和集成Struts2框架所需的核心库和其他...

    struts2+spring+springstruts2+spring+springstruts2+spring+spring

    - **拦截器**:Struts2使用拦截器机制处理请求,提供了强大的功能如文件上传、异常处理等。 - **类型转换和验证**:自动进行表单数据的类型转换,并且可以自定义验证规则,确保数据的正确性。 - **国际化**:支持多...

    Struts2中异常处理机制分析

    本文将深入探讨Struts2的异常处理机制,特别是声明式异常捕捉和异常映射。 首先,Struts2的异常处理机制允许开发者在不干扰Action执行逻辑的情况下,集中处理可能出现的异常。默认情况下,由于Action的`execute()`...

    struts2 spring hibernate整合的简单登录代码

    Spring的依赖注入(DI)使得我们可以轻松管理对象的生命周期和依赖关系,同时,它还提供了事务管理,如使用@Transactional注解进行声明式事务管理。 Hibernate的配置文件(通常是hibernate.cfg.xml)会定义数据库...

    ssh Jar 之struts2jar

    SSH中的Spring框架则是Java企业级应用的核心组件,它提供了一种声明式事务管理方式,可以简化事务处理。Spring的IoC容器负责管理对象的生命周期和对象间的依赖关系,而AOP则用于实现代码的横向切面,如日志记录、...

    struts2需要导入的包

    这些核心库的引入,使得开发者可以充分利用Struts2的特性,如声明式异常处理、国际化支持、插件扩展性、以及强大的表单验证和数据绑定等功能。在实际开发中,还需要根据具体需求引入其他的库,如数据库连接池、JSON...

    struts2中文版参考书

    - **声明式异常处理**:通过配置文件来处理异常,提高代码的健壮性。 #### 8. 国际化支持 - **资源文件**:通过定义资源文件来支持多语言。 - **格式化**:根据不同的语言和地区设置,自动调整日期、数字等格式。 ...

    Struts2整合Spring Hibernate的CRUD实例

    6. **异常处理**:Struts2提供了全局异常处理机制,可以捕获并处理运行时异常。在struts.xml中配置全局异常映射,定义不同类型的异常对应的结果页面,提高应用的健壮性。 7. **视图渲染**:在JSP页面中,通常使用...

Global site tag (gtag.js) - Google Analytics