- 浏览: 550018 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
jsdsh:
自己写的就是不一样.
Spring3 MVC 注解(二)---@RequestMapping -
jsdsh:
吼,非常吼.学习了
Spring3 MVC 注解(一)---注解基本配置及@controller和 @RequestMapping 常用解释 -
爱情是一种错觉:
我爱你 i love 你[color=red][/color] ...
Spring3 MVC 注解(一)---注解基本配置及@controller和 @RequestMapping 常用解释 -
fs08ab:
大哥,目前这个问题有什么可靠的解决方案吗
@ResponseBody注解 -
lhs295988029:
说的很清楚,明白了~
Spring3 MVC 注解(一)---注解基本配置及@controller和 @RequestMapping 常用解释
在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
>
可以看到 有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;
}
}
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>
发表评论
-
使用MongoDB和Spring Data创建一个简单的Java 的CRUD应用
2012-08-01 09:57 1436MongoDB 是一个可扩展的、高性能的、开源的NoSQL ... -
JAVA解决大批量导出数据到excel产生内存溢出的方案 (转)
2012-06-15 10:12 0@SuppressWarnings("u ... -
SSH配置多个数据源
2012-03-13 14:41 01. 编写hibernate的数据库配置文 Mysql_hi ... -
HTML字符实体(Character Entities),转义字符串(Escape Sequence)
2012-02-27 10:39 2159为什么要用转义字符串 ... -
使用SMSLib发短信(收集)
2012-02-07 14:54 24011.mysql做后台数据库; 2 ... -
Apache Commons工具集简介
2011-12-27 19:11 987Apache Commons包含了很多开源的工具,用于解决 ... -
转:YouTube 架构学习体会
2011-11-22 15:23 1186YouTube发展迅速,每天超过1亿的视频点击量,但只有很少人 ... -
字符,字节和编码
2011-11-09 16:22 1191摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解。 ... -
Java日期时间操作函数代码
2011-08-13 16:18 1214/** 日期类 * @date ... -
Log4J diy手册
2011-08-01 11:55 15111. Introduction 在开 ... -
深入分析 Java 中的中文编码问题
2011-07-11 17:12 1525几种常见的编码格式 ... -
BufferedImage to InputStream
2011-06-30 20:56 26121URL url = new URL("http:// ... -
Java打包指南-JAR文件包及jar命令详解
2011-06-15 15:54 9118命令行打war包 ja ... -
正则表达式
2011-06-14 17:35 1421匹配中文字符的正则表达式: [\u4e00-\u9fa5] ... -
svn 命令
2011-06-14 15:59 1010svn co svn+ssh://username@116.2 ... -
使用 jsoup 对 HTML 文档进行解析和操作
2011-06-10 10:32 1625jsoup 简介 Java 程序在解析 HTML 文 ... -
linux设置编码
2011-05-20 10:45 1456set character_set_client='utf ... -
HTML中include file标签的用法
2011-05-05 17:02 21461<!-- #include PathType = Fil ... -
下载 中文文件名乱码问题
2011-04-28 09:42 1234private String processFileName( ... -
Install Redis
2011-04-08 10:16 15081. Get wget http://redis.googl ...
相关推荐
8. **异常处理**:WebWork2的异常处理机制允许开发者定义全局和特定Action的异常处理器,从而统一处理可能出现的运行时错误。 9. **配置管理**:WebWork2的配置文件采用XML格式,可灵活配置Action、Interceptor、...
WebWork2是Struts的前身,它在Struts的基础上进行了很多改进,比如更强大的动作映射、类型安全的参数绑定以及更优秀的异常处理机制。WebWork2的核心设计原则是减少样板代码,提高开发效率,并提供更好的可测试性。 ...
4. 异常处理:WebWork2提供了全局异常处理器,可以统一处理未被捕获的异常,避免页面显示不友好。 5. 动态方法调用(Dynamic Method Invocation,DMI):允许通过URL直接调用对象的方法,增强了路由的灵活性。 6. ...
1. **动作映射(Action Mapping)**:WebWork2通过配置文件定义动作映射,将URL请求映射到特定的Java类方法,简化了请求处理流程。 2. **强大的拦截器(Interceptor)机制**:拦截器可以在动作执行前后执行预处理和...
Webwork2 具有内置的异常处理机制,当发生错误时,它可以捕获异常并生成适当的错误页面。这不仅提高了用户体验,还方便开发者对错误进行调试和管理。 **5. 国际化与本地化** Webwork2 支持多语言环境,开发者可以...
2. **webwork.xml配置**:这是WebWork2的核心配置文件,它定义了动作映射、拦截器、结果类型等。在webwork.xml中,你可以设置全局的拦截器链,指定每个动作的路径、类、方法以及对应的视图(JSP或Freemarker模板)。...
7. **配置(Configuration)**:Webwork2的配置文件定义了URL到Action的映射,Action的转发规则,以及拦截器的配置等。理解配置文件对于有效使用Webwork2至关重要。 8. **异常处理(Exception Handling)**:...
Webwork2 Guide 则会讲解 Webwork2 的核心概念,如动作映射、拦截器栈、OGNL 使用等。DWR 中文文档则会介绍如何设置 DWR,如何在客户端和服务器端交互,以及如何处理安全性问题。 通过学习这三个技术,开发者不仅...
8. **异常处理**:WebWork2提供了优雅的异常处理机制,可以捕获并转换业务异常到用户友好的错误页面,同时保持堆栈跟踪信息,便于调试。 9. **国际化与本地化(i18n & l10n)**:WebWork2支持多语言环境,通过资源...
5. 异常处理:WebWork2 提供了强大的异常处理机制,可以捕获并处理应用程序中抛出的异常,实现优雅的错误页面展示。 二、WebWork2 特性 1. OGNL表达式语言:WebWork2 使用OGNL(Object-Graph Navigation Language...
在WebWork2中,配置文件(如struts-config.xml)用于定义Action的映射、结果和拦截器。拦截器是WebWork2中的一个重要概念,它们可以像过滤器一样在Action执行前后插入自定义逻辑,如权限检查、日志记录等。这种设计...
Webwork2 提供了优雅的错误和异常处理机制,可以自定义错误页面,以及在发生异常时进行适当的响应,确保了用户体验的连续性。 ### 安全性 Webwork2 包含了一些安全特性,如CSRF(跨站请求伪造)防护、XSS(跨站...
2. **动作映射**:WebWork的动作映射机制允许开发者将URL请求与特定的动作类关联起来,简化了请求处理。开发者可以通过配置文件定义这些映射关系。 3. **数据绑定**:WebWork支持双向数据绑定,可以自动将HTTP请求...
5. **异常处理**:WebWork2的异常处理机制允许开发者以优雅的方式处理运行时错误,可以定制化错误页面,提供友好的用户体验。 6. **国际化与本地化**:WebWork2支持多语言环境,通过简单的资源配置就能实现应用的...
WebWork2提供了强大的动作映射、数据绑定、异常处理以及拦截器等功能,使得开发者可以更高效地构建Web应用。 首先,我们要了解WebWork2的核心概念。模型(Model)负责业务逻辑,视图(View)处理用户界面,控制器...
WebWork2提供了统一的异常处理机制,可以捕获并处理业务层抛出的异常,避免暴露敏感信息。同时,框架支持国际化的错误消息和资源文件,使得多语言环境下的开发变得简单。 六、测试与调试 为了提高开发效率,WebWork...
2. **强大的表单绑定**:WebWork 提供了强大的表单数据绑定功能,可以自动将HTTP请求参数与Action类的属性进行映射,简化了数据处理过程。 3. **拦截器(Interceptors)**:WebWork 使用拦截器来执行一些预处理或后...