`

WebWork2 异常映射

阅读更多
在xwork中,package的定义中增加了global-exception-mappings,action的定义中增加了 exception-mapping,要想使用这2个特性,必须使用xwork-1.1.dtd才行 .
DTD中,global-exception-mappings是这样定义 的,
< ELEMENT global-exception-mappings (exception-mapping+)>
也就是说如果要使用,至少包含一个异常映射.
exception-mapping的定义 如下:
<!ELEMENT exception-mapping (#PCDATA|param)*>
<!ATTLIST exception-mapping
    name CDATA #IMPLIED
    exception CDATA #REQUIRED
    result CDATA #REQUIRED
>  

可以看到 有3个属性:名称,异常类型,和结果.


经过一番查看,发现xwork-default.xml中还没有定义相关的拦截器,搜索了一下,发现了ExceptionMappingInterceptor , 看来它是把异常翻译为相应的结果的.
(在最后发行版本中,应该会定义的.目前只好我们自己定义了.)
首先我们虚拟一个程序,假设程序会抛出几种程序
Action定义如下 :
package com.jscud.ww2test.exceptionmap;
  
import com.opensymphony.xwork.ActionSupport;
  
/**
  * @author scud [url]http://www.jscud.com[/url]
  *
  */

public class ExpMappingAction extends ActionSupport
{
     private int type;
  
     public String execute() throws NoRightException,NotFoundException
     {
         if (type==1)
         {
             throw new NoRightException();
         }
         else if (type ==99)
         {
             throw new NotFoundException();
         }
         else if (type==60) //其他异常
         {
             throw new IllegalArgumentException();  
         }
          
         return SUCCESS;
     }
      
     public int getType()
     {
         return type;
     }
      
     public void setType(int type)
     {
         this .type = type;
     }
}  
 从Action可以看出,程序至少会抛出3种异常,我们如果使用异常映射,就要考虑到抛出的所有异常.
程序中用到的NoRightException,NotFoundException是为了演示而建立的2个简单异常,无任何特殊代码,继承自 Exception.
我们的Xwork.xml中的定义 如下:
< package name ="exceptionmapping" extends ="webwork-default" namespace ="/exceptionmap" >
  
  < interceptors >
   < interceptor name ="exceptionmapping" class ="com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor" />
    
   < interceptor-stack name ="myDefaultStack" >
       < interceptor-ref name ="defaultStack" />
       < interceptor-ref name ="exceptionmapping" />
   </ interceptor-stack >
  </ interceptors >

  < default-interceptor-ref name ="myDefaultStack" />


  < global-results >
   < result name ="noright" type ="dispatcher" >
    < param name ="location" > /exceptionmap/noright.jsp</ param >
   </ result >
   < result name ="exception" type ="dispatcher" >
    < param name ="location" > /exceptionmap/exception.jsp</ param >
   </ result >
  </ global-results >
  
  < global-exception-mappings >
   < exception-mapping name ="noright" exception ="com.jscud.ww2test.exceptionmap.NoRightException" result ="noright" />
   < exception-mapping name ="exception" exception ="java.lang.Exception" result ="exception" />
  </ global-exception-mappings >
  
  < action name ="index" class ="com.jscud.ww2test.exceptionmap.ExpMappingAction" >
   < exception-mapping   name ="notfound" exception ="com.jscud.ww2test.exceptionmap.NotFoundException" result ="notfound" />
   < result name ="success" type ="dispatcher" >
    < param name ="location" > /exceptionmap/index.jsp</ param >
   </ result >
   < result name ="notfound" type ="dispatcher" >
    < param name ="location" > /exceptionmap/notfound.jsp</ param >
   </ result >
  </ action >
  
</ package >
首先定义了一个exceptionmapping拦截器,用来指向ExceptionMappingInterceptor.
然后定义 一个拦截器Stack,包含defaultStack和exceptionmapping,注意,exceptionmapping是在Stack的最后 面,否则会发生不可预期的结果.
可以看到global-exception-mappings段包含了2个异常映射,一个为NoRight的处理,另外一个为对应 java.lang.Exception的映射.
在Action的定义中包含了一个exception-mapping,对应NotFound异常.
没有看到IllegalArgumentException的对应结果?? 拦截器对没有定义的异常会依次找这个异常的父类,一级一级向上查找,例如IllegalArgumentException的最终父节点是 Exception,就会转向到Exception对应的结果. 如果一个异常有多个层次关系上的父类,那个关系最近就找谁.
演示页面 如下:
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="webwork" prefix="ww" %>
<html>
   <head>
     <title>exception mapping</title>
   </head>
<body>
  
<br>
Exception 1:
<a href="index.jspa?type=1">Exception 1</a>
<br><br>
  
Exception 99:
<a href="index.jspa?type=99">Exception 99</a>
<br><br>
  
Other Exception:
  
<a href="index.jspa?type=60">Exception 60</a>
<br><br>
  
Normal:
<a href="index.jspa">No Exception</a>
<br><br>
  
</body>
</html>
jsp页面的异常显示:其中AddException,DaoException,FindException是自己定义的异常,继承 exception
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030" %>
<%@ taglib prefix="ww" uri="/webwork" %>
<%@ page import ="com.opensymphony.xwork.util.OgnlValueStack" %>
<%@ page import ="com.opensymphony.xwork.ActionContext" %>
<%@ page import ="com.opensymphony.xwork.interceptor.ExceptionHolder" %>
<%@ page import ="com.mdcl.framework.exception.*" %>
<%@ page import ="java.io.*" %>
<%@ page import ="com.mdcl.timecard.util.Translate" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" >
<title>Insert title here</title>
</head>
<body>   
异常信 息  
<%
String tipMessge = null ;//中文提示信息
    OgnlValueStack s = ActionContext.getContext().getValueStack();  
    ExceptionHolder e;
    String s1 = new String("");;
    String name = new String("");
    for (int i = s.size();i>0;i--){
        Object obj = s.pop();
        if (obj instanceof ExceptionHolder){
            e = (ExceptionHolder)obj;
            Object o = e.getException();
            if (o instanceof AddException){
                AddException we = (AddException)o;
                tipMessge = Translate.translate("ErrorException" );
            }else if (o instanceof DaoException){
                DaoException we = (DaoException)o;
                tipMessge = Translate.translate("ErrorException" );
            }
            else if (o instanceof FindException){
                FindException we = (FindException)o;
                tipMessge = Translate.translate("ErrorException" );
            }
            s1 =e.getExceptionStack();
            System.out.println(tipMessge);
            break ;
        }
    }  
    OutputStream b = response.getOutputStream();
%>
<br/>
<%=tipMessge%>
<%=s1%>
</body>
</html>
分享到:
评论

相关推荐

    webWork2开发指南

    8. **异常处理**:WebWork2的异常处理机制允许开发者定义全局和特定Action的异常处理器,从而统一处理可能出现的运行时错误。 9. **配置管理**:WebWork2的配置文件采用XML格式,可灵活配置Action、Interceptor、...

    webwork2中文教程

    WebWork2是Struts的前身,它在Struts的基础上进行了很多改进,比如更强大的动作映射、类型安全的参数绑定以及更优秀的异常处理机制。WebWork2的核心设计原则是减少样板代码,提高开发效率,并提供更好的可测试性。 ...

    webwork2开发指南

    4. 异常处理:WebWork2提供了全局异常处理器,可以统一处理未被捕获的异常,避免页面显示不友好。 5. 动态方法调用(Dynamic Method Invocation,DMI):允许通过URL直接调用对象的方法,增强了路由的灵活性。 6. ...

    webwork2官方文档中文版

    1. **动作映射(Action Mapping)**:WebWork2通过配置文件定义动作映射,将URL请求映射到特定的Java类方法,简化了请求处理流程。 2. **强大的拦截器(Interceptor)机制**:拦截器可以在动作执行前后执行预处理和...

    Webwork2开发指南

    Webwork2 具有内置的异常处理机制,当发生错误时,它可以捕获异常并生成适当的错误页面。这不仅提高了用户体验,还方便开发者对错误进行调试和管理。 **5. 国际化与本地化** Webwork2 支持多语言环境,开发者可以...

    WebWork2配置

    2. **webwork.xml配置**:这是WebWork2的核心配置文件,它定义了动作映射、拦截器、结果类型等。在webwork.xml中,你可以设置全局的拦截器链,指定每个动作的路径、类、方法以及对应的视图(JSP或Freemarker模板)。...

    Webwork2_guide

    7. **配置(Configuration)**:Webwork2的配置文件定义了URL到Action的映射,Action的转发规则,以及拦截器的配置等。理解配置文件对于有效使用Webwork2至关重要。 8. **异常处理(Exception Handling)**:...

    Struts2-Webwork2-DWR

    Webwork2 Guide 则会讲解 Webwork2 的核心概念,如动作映射、拦截器栈、OGNL 使用等。DWR 中文文档则会介绍如何设置 DWR,如何在客户端和服务器端交互,以及如何处理安全性问题。 通过学习这三个技术,开发者不仅...

    webwork2实例源代码

    8. **异常处理**:WebWork2提供了优雅的异常处理机制,可以捕获并转换业务异常到用户友好的错误页面,同时保持堆栈跟踪信息,便于调试。 9. **国际化与本地化(i18n & l10n)**:WebWork2支持多语言环境,通过资源...

    WebWork2 开发指南

    5. 异常处理:WebWork2 提供了强大的异常处理机制,可以捕获并处理应用程序中抛出的异常,实现优雅的错误页面展示。 二、WebWork2 特性 1. OGNL表达式语言:WebWork2 使用OGNL(Object-Graph Navigation Language...

    WebWork2学习笔记

    在WebWork2中,配置文件(如struts-config.xml)用于定义Action的映射、结果和拦截器。拦截器是WebWork2中的一个重要概念,它们可以像过滤器一样在Action执行前后插入自定义逻辑,如权限检查、日志记录等。这种设计...

    Webwork2 开发指南

    Webwork2 提供了优雅的错误和异常处理机制,可以自定义错误页面,以及在发生异常时进行适当的响应,确保了用户体验的连续性。 ### 安全性 Webwork2 包含了一些安全特性,如CSRF(跨站请求伪造)防护、XSS(跨站...

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    2. **动作映射**:WebWork的动作映射机制允许开发者将URL请求与特定的动作类关联起来,简化了请求处理。开发者可以通过配置文件定义这些映射关系。 3. **数据绑定**:WebWork支持双向数据绑定,可以自动将HTTP请求...

    WebWork2中文手册

    5. **异常处理**:WebWork2的异常处理机制允许开发者以优雅的方式处理运行时错误,可以定制化错误页面,提供友好的用户体验。 6. **国际化与本地化**:WebWork2支持多语言环境,通过简单的资源配置就能实现应用的...

    webwork2入门例子

    WebWork2提供了强大的动作映射、数据绑定、异常处理以及拦截器等功能,使得开发者可以更高效地构建Web应用。 首先,我们要了解WebWork2的核心概念。模型(Model)负责业务逻辑,视图(View)处理用户界面,控制器...

    WebWork2开发指南-程序设计

    WebWork2提供了统一的异常处理机制,可以捕获并处理业务层抛出的异常,避免暴露敏感信息。同时,框架支持国际化的错误消息和资源文件,使得多语言环境下的开发变得简单。 六、测试与调试 为了提高开发效率,WebWork...

    webwork

    2. **强大的表单绑定**:WebWork 提供了强大的表单数据绑定功能,可以自动将HTTP请求参数与Action类的属性进行映射,简化了数据处理过程。 3. **拦截器(Interceptors)**:WebWork 使用拦截器来执行一些预处理或后...

Global site tag (gtag.js) - Google Analytics