`
gkuiyj
  • 浏览: 91447 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2的异常处理机制:

阅读更多
  Struts2的异常处理机制:

任何成熟的MVC框架都应该提供成就的异常处理机制。Strut2也不例外。Struts2提供了一种声明式的异常处理方式。Struts2也是通过配置的拦截器来实现异常处理机制的。

Struts2的异常处理机制通过在struts.xml文件中配置﹤exception-mapping …﹥元素完成的,配置该元素时,需要指定两个属性:

exception:此属性指定该异常映射所设置的异常类型。

result:此属性指定Action出现该异常时,系统转入result属性所指向的结果。


  异常映射也分为两种:

局部异常映射:﹤exception-mapping…﹥元素作为﹤action…﹥元素的子元素配置。

全局异常映射:﹤exception-mapping…﹥元素作为﹤global-exception-mappings﹥元素的子元素配置。


   输出异常信息:

使用Struts2的标签来输出异常信息:

﹤s:property value="exception.message"/﹥:输出异常对象本身。

﹤s:property value="exceptionStack"/﹥: 输出异常堆栈信息。







利用struts2的异常处理机制和拦截器机制可以很方便的实现异常处理功能,你不再需要在Action中捕获异常,并抛出相关的异常了,这些都交给拦截器来帮你做了。





1.  在 struts.xml 文件中,声明全局异常映射,以及对应的全局异常转发如下所示:

﹤global-results﹥

﹤result name="error"﹥/admin/error/ErrDisplay.ftl﹤/result﹥

﹤/global-results﹥

﹤global-exception-mappings﹥

﹤exception-mapping result="error" exception="com.orizone.hbmobile.hbcm.struts.BusinessException"﹥﹤/exception-mapping﹥

﹤/global-exception-mappings﹥



BusinessException  是异常处理类,代码如下所示:



public class BusinessException extends RuntimeException

{



    private static final long serialVersionUID = 0xc1a865c45ffdc5f9L;

  

    public BusinessException(String frdMessage)

    {

        super(createFriendlyErrMsg(frdMessage));

    

    }



    public BusinessException(Throwable throwable)

    {

        super(throwable);

    }



    public BusinessException(Throwable throwable, String frdMessage)

    {

        super(throwable);

     

    }

  

  

private static String createFriendlyErrMsg(String msgBody){

String prefixStr = "抱歉,";

String suffixStr = " 请稍后再试或与管理员联系!";



StringBuffer friendlyErrMsg = new StringBuffer("");



friendlyErrMsg.append(prefixStr);

friendlyErrMsg.append(msgBody);

friendlyErrMsg.append(suffixStr);



return friendlyErrMsg.toString();

}

}





2.  /admin/error/ErrDisplay.ftl 页面

这个页面很简单:

﹤body﹥

﹤h2﹥

         出现异常啦

﹤/h2﹥

﹤hr/﹥

   ﹤h3 style="color:red"﹥

   ﹤!-- 获得异常对象 --﹥

  

    ${exception.message?default("")}

    ﹤/h3﹥

    ﹤br/﹥

    ﹤!-- 异常堆栈信息(开发人员用) --﹥

    ﹤div style="display:none;"﹥

       ${exceptionStack?default("")}

    ﹤/div﹥

﹤/body﹥

﹤body﹥

﹤h2﹥

         出现异常啦

﹤/h2﹥

﹤hr/﹥

   ﹤h3 style="color:red"﹥

   ﹤!-- 获得异常对象 --﹥

  

    ${exception.message?default("")}

    ﹤/h3﹥

    ﹤br/﹥

    ﹤!-- 异常堆栈信息(开发人员用) --﹥

    ﹤div style="display:none;"﹥

       ${exceptionStack?default("")}

    ﹤/div﹥

﹤/body﹥



3.  在拦截器中,捕获常见的异常,并以友好异常信息抛出,相关代码如下所示:

public String intercept(ActionInvocation invocation) throws Exception

{

before(invocation);

String result = "";



try{

result = invocation.invoke();

}catch(DataAccessException ex){

throw new BusinessException("数据库操作失败!");

}catch(NullPointerException ex){

throw new BusinessException("调用了未经初始化的对象或者是不存在的对象!");

}catch(IOException ex){

throw new BusinessException("IO异常!");

}catch(ClassNotFoundException ex){

throw new BusinessException("指定的类不存在!");

}catch(ArithmeticException ex){

throw new BusinessException("数学运算异常!");

}catch(ArrayIndexOutOfBoundsException ex){

throw new BusinessException("数组下标越界!");

}catch(IllegalArgumentException ex){

throw new BusinessException("方法的参数错误!");

}catch(ClassCastException ex){

throw new BusinessException("类型强制转换错误!");

}catch(SecurityException ex){

throw new BusinessException("违背安全原则异常!");

}catch(SQLException ex){

throw new BusinessException("操作数据库异常!");

}catch(NoSuchMethodError ex){

throw new BusinessException("方法末找到异常!");

}catch(InternalError ex){

throw new BusinessException("Java虚拟机发生了内部错误");

}catch(Exception ex){

throw new BusinessException("程序内部错误,操作失败!");

}



after(invocation, result);

return result;

}

struts2做异常处理还是比较方便的了。
分享到:
评论
1 楼 whyang 2009-11-17  
先鄙视一下这个论坛,要做测试才能回复。

我是想问下楼主,
第三步:  3.  在拦截器中,捕获常见的异常,并以友好异常信息抛出,相关代码。。。
你所说到拦截器是自定义拦截器还是那个拦截器,如果是自定义拦截器,那怎么配置,让它在ACTION产生异常到时候拦截呢?请把这个拦截器到具体配置补充一下,谢谢了。

相关推荐

    Struts2异常处理机制

    Struts2作为一款流行的Java Web框架,其异常处理机制是其核心功能之一,它使得开发者能够优雅地管理和处理应用程序中的异常情况,提供了一种统一的错误处理方式,从而提高用户体验并增强程序的健壮性。 在Struts2...

    Struts2之异常处理案例struts003

    下面将详细讨论Struts2中的异常处理机制及其相关知识点。 1. **异常处理机制概述** Struts2提供了内置的异常处理机制,允许开发者定义全局和局部的异常映射,以控制应用程序中出现异常时的行为。全局异常处理适用...

    struts2的异常处理机制

    Struts2是一个流行的Java web框架,它提供了强大的异常处理机制,使得开发者能够优雅地管理和展示在应用程序中出现的错误和异常。以下是对Struts2异常处理机制的详细说明: 1. **异常处理流程**: 当一个Action...

    Struts2 Design and Programming: A Tutorial.pdf

    - Struts2提供了一套完整的异常处理机制,允许开发者自定义错误页面和处理策略。 9. **Struts2的安全性** - 讨论Struts2的安全问题,如XSS和CSRF攻击,并学习如何通过配置和最佳实践来防范这些风险。 10. **实战...

    Struts Design and Programming: A Tutorial

    Struts1提供了全局异常处理机制,允许开发者定义全局和特定Action的异常处理策略。 **10.Tiles框架集成** Tiles是Struts的一个扩展,允许创建可重用的页面布局组件,提高视图的复用性和可维护性。 通过本教程,...

    struts手动异常处理

    2. **全局异常处理**:Struts允许我们在配置文件中定义全局异常映射,这样所有Action中的未捕获异常都会被映射到特定的结果页面。在`struts.xml`或`struts-default.xml`中,可以使用`<global-exception-mappings>`...

    Struts1异常处理

    尽管如此,许多遗留系统仍然依赖于Struts1,因此理解其异常处理机制仍然是必要的。 在Struts1中,异常处理主要通过两个组件来实现:`Action`类和`Tiles`或`Struts-config.xml`配置文件中的`exception`标签。当一个...

    struts2中异常处理(demo)

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展且易于管理的企业级应用程序。...结合提供的压缩包文件"struts2_003",可能包含了示例代码或者项目结构,帮助读者理解并实践Struts2的异常处理机制。

    struts1.x 异常处理机制

    总结来说,Struts1.x的异常处理机制包括全局异常配置和自定义Action异常处理两部分。通过合理利用这两种方式,开发者可以有效地控制和管理应用程序的异常,提供更健壮的错误处理,提高系统的稳定性和用户体验。在...

    Struts2 异常处理的四种获取属性方法

    在Struts2框架中,异常处理是至关重要的一个部分,它确保了应用程序的稳定性和用户体验。Struts2提供了多种方式来捕获和处理异常,帮助开发者优雅地处理程序中的错误情况。以下是Struts2异常处理的四种主要方法,...

    基于Struts的异常处理

    总结一下,基于Struts的异常处理机制: 1. 定义自定义异常类,如`AppException`,包含错误代码和参数,方便处理和展示错误信息。 2. 创建自定义异常处理器,如`AppExceptionHandler`,继承自Struts提供的`...

    Struts2讲义-作者:吴峻申

    - Struts2提供了默认的拦截器栈,包含了一些常用的功能,如参数填充、异常处理等。 - **拦截器原理实现**: - 拦截器基于AOP(面向切面编程)思想实现。 - 当请求到达时,Struts2会根据配置找到相应的拦截器栈,...

    Struts2 Spring2.5集成:系统登陆demo--带lib可直接运行

    Struts2的动作映射和结果处理机制可以很好地处理这些流程,而Spring则可以管理数据库连接和事务,确保数据操作的一致性。 7. **运行环境**:由于是“带lib可直接运行”的Demo,压缩包中可能包含了所有运行所需库...

    Struts1和Struts2区别

    - **Struts2**:提供了更强大的异常处理机制,可以定义全局和Action级别的异常映射,更易管理。 6. 数据校验: - **Struts1**:使用ActionForm中的Validate方法进行客户端或服务器端校验,需要编写大量重复代码。...

    Struts2的异常处理

    Struts2作为一款流行的Java Web框架,其异常处理机制是开发者必须掌握的关键部分。这篇博客主要探讨了在Struts2中如何有效地管理和处理异常,从而提高应用的稳定性和用户体验。 在Struts2中,异常处理主要通过两种...

    Struts2工作机制

    Struts2包含了一些内置的拦截器,如`ValidationInterceptor`用于验证表单数据,`ExceptionHandlerInterceptor`处理异常等。开发者可以根据需求自定义拦截器,实现特定的行为,如登录检查、日志记录等。 4. **...

    struts2的异常处理

    本篇文章将深入探讨Struts2的异常处理策略,以及如何在DAO层进行单元测试配置。 在传统的Web应用中,当一个异常发生时,通常会跳转到错误页面或者返回错误信息。但在现代Web应用中,尤其是涉及到Ajax异步请求时,...

    struts错误处理机制小例子

    2. **全局异常处理**:在struts-config.xml中,我们可以定义全局的异常映射(global-exceptions)。当Action执行过程中抛出未被捕获的异常时,Struts会查找匹配的异常映射,根据配置转发到特定的错误页面。例如,...

Global site tag (gtag.js) - Google Analytics