- 浏览: 578302 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (411)
- webservice (3)
- oracle (37)
- sqlserver (8)
- j2ee (56)
- linux (7)
- javaweb (47)
- office (1)
- struts (23)
- hibernate (11)
- spring (29)
- 网络 (2)
- tomcat (13)
- tongweb (0)
- weblogic (0)
- powerdesiginer (3)
- svn (3)
- js (20)
- ie (2)
- 编译 (3)
- css (2)
- 操作系统 (5)
- Android (41)
- jbpm4.3 (1)
- fckeditor (3)
- 操作excel (2)
- db2常用命令 (1)
- ibatis (5)
- mysql (16)
- 表达式语言 (1)
- java方式调用存储过程 (1)
- ca (1)
- linux客户端 (1)
- 电子数码 (1)
- 行业应用 (12)
- 开发工具 (4)
- 面试 (1)
- 计算机原理 (1)
- NOSQL (5)
- 虚拟机 (1)
- nginx (0)
- velocity (2)
- jndi (1)
- spring mvc (39)
- springmvc (32)
- 安全 (5)
- htmleditor (6)
- iphone4 (1)
- html (4)
- jstl (2)
- ckeditor (5)
- 连接池 (1)
- jquery (6)
- 分页 (1)
- 技术研发规则 (1)
- javamail (1)
- maven (2)
- upload (1)
- log (1)
- 测试 (10)
- spring roo (1)
- 版本控制 (2)
- find bugs (0)
- jsf (0)
- springroo (0)
- 小道理 (1)
- 小道理,技术标准 (1)
- jsf (0)
- bitbao (2)
- redmine (3)
- 团队意识 (1)
- mybatis (2)
- jquery mobile (1)
- flexpaper (0)
- json (4)
- URLRewriteFilte (1)
- html5 (1)
- 都乐保活动 (0)
- openfire (0)
- TreeMap (1)
- build (0)
- javaweb,tag (0)
- algorithm (1)
- tag (2)
- 扯淡 (0)
- mac (2)
- 叶一火(老一) (1)
- 游玩 (1)
- 编码 (1)
- 上线部署 (0)
- 研发管理 (0)
- thumbnailator (2)
- 旅游 (0)
- bingweibo (1)
- 杂谈 (4)
- ktv (1)
- weibo (1)
- 爱情 (2)
- 饮食 (1)
- MediaWiki (1)
- git (1)
- 版本库 (1)
- servlet (1)
- 感悟 (1)
- 人生 (1)
- highcharts (1)
- poi (0)
- websphere (0)
- php (1)
最新评论
-
woshixushigang:
good
org.springframework.beans.TypeMismatchException: Failed to convert property valu -
nathanleewei:
org.springframework.jdbc.core.B ...
org.springframework.beans.TypeMismatchException: Failed to convert property valu -
浪禾木:
请问是ckeditor\contents.css吗?改过以后 ...
ckeditor自动换行问题 -
simusuishi:
刚哥威武!
ckeditor取值赋值问题 -
a455642158:
收割完毕……
Android开源项目源码下载(不断更新中)
在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
>
<!ATTLIST exception-mapping
name CDATA #IMPLIED
exception CDATA #REQUIRED
result CDATA #REQUIRED
>
经过一番查看,发现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;
}
}
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>
<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的最后面,否则会发生不可预期的结果.
然后定义一个拦截器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>
<%@ 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>
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>
发表评论
-
eclipse codestyle和formate
2011-12-26 11:20 1061北京都乐宝软件信息技术公司的代码风格 -
Common-logging 与 Log4j的结合使用
2011-12-25 15:58 1207转自:http://hi.baidu.com/suofang/ ... -
ssh整合(转)
2011-09-06 14:50 1275终于,终于将SSH整合成 ... -
struts1学习体会
2011-08-27 22:25 887ZT:http://blog.csdn.net/toyouhe ... -
struts1例子
2011-08-27 22:16 1647最近一直再做struts2的项目,一年前做的struts1林业 ... -
struts.xml及default-action-ref详解
2011-08-22 17:54 2110我想实现访问一个acion时候,如果这个action不存在, ... -
struts1防止重复提交
2011-08-21 23:39 1057防止重复提交java解决 ( ... -
struts2防止重复提交
2011-08-08 14:42 1218本人负责全国林业行政执法人员管理系统,当时遇到了新增重复提交问 ... -
struts2的sruts-default.xml解释
2011-08-08 14:20 993这个文件是struts2框架默认加载的配置文件。它定义st ... -
struts.xml详解
2011-08-08 11:10 809<?xml version="1.0& ... -
Unable to find 'struts.multipart.saveDir' property setting.
2011-08-08 10:23 1612以前在项目中遇到Unable to find 'struts. ... -
struts2标签中限制文本域字数
2011-05-20 16:51 1595实现textarea限制输入字 ... -
实现textarea限制输入字数
2011-05-20 15:47 1035实现textarea限制输入字 ... -
struts2接收字符日期存到数据库
2011-05-18 10:54 1372模拟51job招聘网站出现的小插曲。 1、注册时候的信 ... -
struts2 JSON插件怪异的问题
2011-03-10 14:05 966private FenleiBizIntf fenleiBiz ... -
各种错误集锦(更新中。。。)
2011-03-01 21:32 945struts2中 根据一个条件查询表时候,如果数据库中没有此数 ... -
struts2的action中默认不会初始化属性,也不会实例化属性
2011-02-19 14:27 1621编写jdbc分页时易出现的马虎。 public St ... -
The Struts dispatcher cannot be found. This is usually caused by using Struts ta
2011-02-08 21:05 1213The Struts dispatcher canno ... -
STRUTS2返回类型
2010-12-26 01:40 820STRUTS2返回类型开始使用struts2的时候,想跳转到另 ... -
STRUTS2返回类型
2010-12-26 01:40 1043STRUTS2返回类型 开始使用struts2的时候,想跳转 ...
相关推荐
Struts2作为一款流行的Java Web框架,其异常处理机制是其核心功能之一,它使得开发者能够优雅地管理和处理应用程序中的异常情况,提供了一种统一的错误处理方式,从而提高用户体验并增强程序的健壮性。 在Struts2...
在Struts框架中,异常处理是不可或缺的一部分,因为它有助于确保程序的健壮性和用户体验。 手动异常处理在Struts中通常涉及到以下几个方面: 1. **异常拦截器**:在Struts 2中,我们可以通过编写自定义的拦截器来...
总结来说,Struts1.x的异常处理机制包括全局异常配置和自定义Action异常处理两部分。通过合理利用这两种方式,开发者可以有效地控制和管理应用程序的异常,提供更健壮的错误处理,提高系统的稳定性和用户体验。在...
下面将详细讨论Struts2中的异常处理机制及其相关知识点。 1. **异常处理机制概述** Struts2提供了内置的异常处理机制,允许开发者定义全局和局部的异常映射,以控制应用程序中出现异常时的行为。全局异常处理适用...
2. **全局异常处理**:在struts-config.xml中,我们可以定义全局的异常映射(global-exceptions)。当Action执行过程中抛出未被捕获的异常时,Struts会查找匹配的异常映射,根据配置转发到特定的错误页面。例如,...
Struts2是一个流行的Java web框架,它提供了强大的异常处理机制,使得开发者能够优雅地管理和展示在应用程序中出现的错误和异常。以下是对Struts2异常处理机制的详细说明: 1. **异常处理流程**: 当一个Action...
尽管如此,许多遗留系统仍然依赖于Struts1,因此理解其异常处理机制仍然是必要的。 在Struts1中,异常处理主要通过两个组件来实现:`Action`类和`Tiles`或`Struts-config.xml`配置文件中的`exception`标签。当一个...
Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展且易于管理的企业级应用程序。...结合提供的压缩包文件"struts2_003",可能包含了示例代码或者项目结构,帮助读者理解并实践Struts2的异常处理机制。
在实际开发中,不可避免地会遇到各种异常情况,因此理解并熟练掌握Struts2的异常处理机制至关重要。本篇将深入探讨Struts2框架中的异常处理策略,以及如何在实际项目中应用。 首先,Struts2提供了一种统一的方式来...
总结一下,基于Struts的异常处理机制: 1. 定义自定义异常类,如`AppException`,包含错误代码和参数,方便处理和展示错误信息。 2. 创建自定义异常处理器,如`AppExceptionHandler`,继承自Struts提供的`...
在提供的压缩包文件"Struts_exception"中,可能包含了Struts异常处理的相关示例代码或者教程,例如如何配置struts.xml,如何创建自定义异常类,以及如何在Action中进行异常处理等。这些资源可以帮助开发者更深入地...
在Struts2框架中,异常处理是至关重要的一个部分,它确保了应用程序的稳定性和用户体验。Struts2提供了多种方式来捕获和处理异常,帮助开发者优雅地处理程序中的错误情况。以下是Struts2异常处理的四种主要方法,...
Struts2包含了一些内置的拦截器,如`ValidationInterceptor`用于验证表单数据,`ExceptionHandlerInterceptor`处理异常等。开发者可以根据需求自定义拦截器,实现特定的行为,如登录检查、日志记录等。 4. **...
Struts2作为一款流行的Java Web框架,其异常处理机制是开发者必须掌握的关键部分。这篇博客主要探讨了在Struts2中如何有效地管理和处理异常,从而提高应用的稳定性和用户体验。 在Struts2中,异常处理主要通过两种...
本篇文章将深入探讨Struts2的异常处理策略,以及如何在DAO层进行单元测试配置。 在传统的Web应用中,当一个异常发生时,通常会跳转到错误页面或者返回错误信息。但在现代Web应用中,尤其是涉及到Ajax异步请求时,...
综上所述,"应用Struts2处理表单数据"这个主题涵盖了Struts2框架中的诸多关键概念,包括Action设计、表单数据绑定、结果处理、拦截器、配置、表达式语言以及验证和异常处理机制。这些知识点对于理解和开发基于Struts...
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括表单处理、MVC设计模式支持以及异常处理机制。在文件上传方面,Struts2提供了方便的API和配置方式来处理单个或多个文件的上传。在这个主题中,...