`
woshixushigang
  • 浏览: 578302 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

struts异常处理机制

 
阅读更多
在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>
分享到:
评论

相关推荐

    Struts2异常处理机制

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

    struts手动异常处理

    在Struts框架中,异常处理是不可或缺的一部分,因为它有助于确保程序的健壮性和用户体验。 手动异常处理在Struts中通常涉及到以下几个方面: 1. **异常拦截器**:在Struts 2中,我们可以通过编写自定义的拦截器来...

    struts1.x 异常处理机制

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

    Struts2之异常处理案例struts003

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

    struts错误处理机制小例子

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

    struts2的异常处理机制

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

    Struts1异常处理

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

    struts2中异常处理(demo)

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

    struts异常处理

    在实际开发中,不可避免地会遇到各种异常情况,因此理解并熟练掌握Struts2的异常处理机制至关重要。本篇将深入探讨Struts2框架中的异常处理策略,以及如何在实际项目中应用。 首先,Struts2提供了一种统一的方式来...

    基于Struts的异常处理

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

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

    在提供的压缩包文件"Struts_exception"中,可能包含了Struts异常处理的相关示例代码或者教程,例如如何配置struts.xml,如何创建自定义异常类,以及如何在Action中进行异常处理等。这些资源可以帮助开发者更深入地...

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

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

    Struts2工作机制

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

    Struts2的异常处理

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

    struts2的异常处理

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

    应用Struts2处理表单数据

    综上所述,"应用Struts2处理表单数据"这个主题涵盖了Struts2框架中的诸多关键概念,包括Action设计、表单数据绑定、结果处理、拦截器、配置、表达式语言以及验证和异常处理机制。这些知识点对于理解和开发基于Struts...

    struts2 单文件,多文件上传及拦截器实现异常处理

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括表单处理、MVC设计模式支持以及异常处理机制。在文件上传方面,Struts2提供了方便的API和配置方式来处理单个或多个文件的上传。在这个主题中,...

Global site tag (gtag.js) - Google Analytics