• Struts2中将global-exception定位到一个Action中处理,及获取其异常信息的方法


     通常情况下,会使用Struts2的异常框架对系统中产生的异常进行统一处理,其好处是可以让开发人员减少程序成中的try catch块,更多的关于业务处理,并且可以通过global与局部异常的配合使用,达到理想的效果。
    
        当使用了这种方式之后,其异常可以指向一个result,该result可以显示为一个jsp页面,在该页面中可以友好的显示异常信息,通常显示异常可以由以下Struts标签完成:
    
    <s:propertyvalue="exception.message"/>
    
         以上方式基本满足异常的处理,但有些情况下,业务上需要处理更多的信息,一个简单的异常页面不能够满足需求。这时,我们更希望该异常捕获后,result能够定位到一个Action,由此Action进行后续操作。
    
        要实现这种效果,可以在捕获异常的result中,使用chain类型的result进行处理。
    
    在处理的Action中以下述方式获取异常信息:
    
        ActionContext.getContext().getValueStack().findValue("exception")
    
        示例:加入有一个接口系统,所有对外的接口均以XML作为结果输出,异常使用Struts2的统一异常框架进行处理。其实现方式如下:
    
       在Struts2的配置文件中定义异常的处理方式(全局Exception示例):
    
       <global-results>
    
         <resultname="all"type="chain">error</result>
    
         </global-results>
    
    <global-exception-mappings>
    
               <exception-mappingresult="all"exception="java.lang.Exception"/>
    
       </global-exception-mappings>
    
    <actionname="error"class="com.ray.action.ErrorAction">
    
               <resultname="xmlMessage"></result>
    
       </action>
    
        当接口中发生了异常,此时无法将正确的结果返回给客户端,需要将操作失败的信息返回给用户(以定义的错误XML接口返回),同时将异常信息记录到日志中,ErrorAction的操作大致如下所示:
    
       
    
       public String execute() {
    
           HttpServletResponse response = ServletActionContext.getResponse();
    
           response.setContentType("text/xml;charset=UTF-8");
    
           response.setHeader("Cache-Controll", "no-cache");
    
     
    
           PrintWriter pw = null;
    
           try{
    
               pw = response.getWriter();
    
           } catch(IOException e) {
    
               e.printStackTrace();
    
           }
    
        
    
           pw.write("<result>"
    
                  + ActionContext.getContext().getValueStack()
    
                         .findValue("exception") + "</result>");
    
           pw.close();
    
     
    
           return "xmlMessage";
    
        }

  • 相关阅读:
    kafka消费者如何才能从头开始消费某个topic的全量数据
    kafka消费者客户端启动之后消费不到消息的原因分析
    JMeter测试工具中的参数化使用[函数助手]
    在IDEA中使用gradle配置打可执行jar包[可执行jar与其所依赖的jar分离]
    一次tomcat配置参数调优Jmeter压力测试记录前后对比
    IntelliJ IDEA 14.1.4导入项目启动报错:Error during artifact deployment.[组件部署期间出错]
    BZOJ2861 : 双向边定向为单向边
    BZOJ4313 : 三维积木
    BZOJ4714 : 旋转排列
    BZOJ1395 : [Baltic2005]Trip
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317875.html
Copyright © 2020-2023  润新知