- 浏览: 74813 次
- 性别:
- 来自: 北京
最新评论
-
wteqiao:
[color=orange][/color]
annotation(@Retention) -
hanwesley:
谢谢,我在你的基础之上学习的。感觉还不错。
我理解的lucene原理(初级) -
DepthJava:
一直没找到,能完全解析EMial的方法。包括MIME解析
乱 ...
MIME协议分析(转) -
hardPass:
能看看你的mvc-config.xml 啊?
自制MVC框架:TonyMVC -
geek87:
非常好的资料..支持一下
spring2.5 注解技术
1 异常链
当不需要用户来处理和关心原始的异常时,常见的做法是捕获原始的异常,把他们包装成一个新的不同类型的异常,然后再抛出异常。
所谓异常链就是把原始异常包装成新的异常类时,在新的异常类中封装了原始异常类
2 多样化异常
在实际应用中,有时需要一个方法同时抛出多个异常。
如果应用不支持在一个方法中抛出多个异常,用户每次将只能看到针对一个字段域的验证错误,当改正了一个错误后,重新提交表单,又会收到针对另一个字段域的验证错误,这会使得用户体验非常多差劲。
有效的做法是每次当用户提交表单后,都验证所有的字段,然后向用户显示所有的验证信息。不幸的是,在java中一次只能抛出一个异常。因此需要开发者自行设计支持多样化异常的异常类。
3 struts异常分析
在struts的控制层中,将java的异常类包装成ActionMessage。在struts中定义异常有两种方式:
扩展ModuleException和创建自定义的异常类体系。
扩展ModuleException :
优点,可以很好的和sturts的Resouce Bundle绑定。
ModuleException(String key)和ModuleException(String key,Object[] values)
key为错误消息key,values为对象数组类型的values参数。
自定义异常类:
如:
import java.io.PrintStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; public class BaseException extends Exception { protected Throwable rootCause = null; private List exception = new ArrayList<Throwable>(); private String messageKey = null; private Object[] messageArgs = null; public Throwable getRootCause() { return rootCause; } public void setRootCause(Throwable rootCause) { this.rootCause = rootCause; } public List getException() { return exception; } public void addException(Throwable exception) { this.exception.add(exception); } public String getMessageKey() { return messageKey; } public void setMessageKey(String messageKey) { this.messageKey = messageKey; } public Object[] getMessageArgs() { return messageArgs; } public void setMessageArgs(Object[] messageArgs) { this.messageArgs = messageArgs; } @Override public void printStackTrace() { printStackTrace(System.err); } @Override public void printStackTrace(PrintStream s) { printStackTrace(new PrintWriter(s)); } @Override public void printStackTrace(PrintWriter s) { super.printStackTrace(s); if(getRootCause() != null){ getRootCause().printStackTrace(s); } s.flush(); } }
因为有了rootCause exceptions messageKey 和messageArgs 这四个属性使得这个自定义异常类有了以下功能:
支持异常的级联,rootCause属性制定原始异常(异常链)
支持多样化异常,exceptions属性存放所有嵌套的异常
支持和struts的Resouce Bundle的绑定,messageKey属性指定消息key
支持复合式消息,messageArgs属性指定复合式消息中的参数。
处理异常的方法 :
NO。1
自己手动编写。
个人抛出异常方法:
if(满足一定条件){
throw new RuntionException(“错误提示信息”);
}
由自己try {}catch(){}进行捕获然后,用mapping.forwoard(“”)跳转到处理页面中来。
xxAction.java
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String id = request.getParameter("id");
try {
getOrgnizationService().delete(id);
} catch (RuntimeException e) {
/**
* 返回一个错误信息。
*/
ActionMessages mesgs = new ActionMessages();
ActionMessage mesg = new ActionMessage("error.detail",e.getMessage());//error.detail为资源文件,e.getMessage()为得到的错误信息。他所处的地方为error.detail的参数所在地。
mesgs.add("error",mesg);
this.saveErrors(request, mesgs); //错误信息存入到页面中去。
return mapping.findForward("exception");
}
return mapping.findForward("OK");
}
struts-config.xml文件:
<action-mappings >
<action
attribute="orgnizationForm"
name="orgnizationForm"
parameter="method"
path="/orgnization"
scope="request"
type="org.springframework.web.struts.DelegatingActionProxy"
validate="false">
<forward name="exception" path="/error.jsp"></forward>
<forward name="OK" path="/main/orgnization.jsp" />
</action>
</action-mappings>
在页面调用这个时应该用<html:errors>即可把资源文件里面的错误信息显示出来。
NO。2
在项目中通常需要统一的错误处理。将异常throws出去,交给sturts来处理。
有两个缺点 :
不能处理带参数的异常!去给资源文件的参数赋值;
异常的类型在配置文件中是固定的,不能动态改变。
struts可以有两种方法对异常进行处理。
一种 是在struts配置文件里面的action下面(局部异常处理 ),用exception来处理
<action-mappings >
<action
attribute="orgnizationForm"
name="orgnizationForm"
parameter="method"
path="/orgnization"
scope="request"
type="org.springframework.web.struts.DelegatingActionProxy">
<exception key="error.detail" type="java.lang.RuntimeException
" scope="request" path="/error.jsp"></exception>
<forward name="OK" path="/main/orgnization.jsp" />
</action>
</action-mappings>
另一种 方法是在struts的配置文件中的global-exception为全局的异常 :
<global-exceptions> <exception key="error.detail" type="java.lang.RuntimeException" scope="request" path="/error.jsp"></exception> </global-exceptions>
NO。3 (推荐)
使用自定义的异常类来继承原始的异常。用自定义的异常类来处理整个工程的异常。在一个异常类中使用多种异常。用一个异常类来代表不同的异常消息。
首先,定义自己的异常类:他要继承RuntimeException
package edu.hust.util;
import java.io.PrintStream;
import java.io.PrintWriter;
public class SystemException extends RuntimeException {
private String key;
private Object[] values;
public String getKey(){
return key;
}
public Object[] getValues(){
return values;
}
public SystemException() {
super();
}
public SystemException(String message, Throwable cause) {
super(message, cause);
}
public SystemException(String message) {
super(message);
}
public SystemException(Throwable cause) {
super(cause);
}
public SystemException(String message,String key){
super(message);
this.key = key;
}
public SystemException(String message,String key,Object values){
super(message);
this.key = key;
this.values = new Object[]{values};
}
public SystemException(String message,String key,Object[] values){
super(message);
this.key = key;
this.values = values;
}
}
在抛出异常的地方:
public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String id = request.getParameter("id"); try { getOrgnizationService().delete(id); } catch (RuntimeException e) { throw new SystemException("有子机构,不能删除!","error.detail2");//去对应上面的构造函数,知道error.detail2为key。 } return mapping.findForward("OK"); }
在配置文件中:
<global-exceptions>
<exception
key="error.detail"
type="edu.hust.SystemException"
scope="request"
path="/error.jsp"
handler="edu.hust.util.SystemExceptionHandler">
</exception>
</global-exceptions>
异常处理类:
package edu.hust.util;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ExceptionHandler;
import org.apache.struts.config.ExceptionConfig;
/**
* 统一异常处理类,继承的是org.apache.struts.action下的ExceptionHandler。
* 实现execute方法即可
。
* @author sunqitang
*
*/
public class SystemExceptionHandler extends ExceptionHandler {
@Override
public ActionForward execute(Exception ex, ExceptionConfig ae,
ActionMapping mapping, ActionForm formInstance,
HttpServletRequest request, HttpServletResponse response)
throws ServletException {
ActionForward forward = null;
if( null != ae.getPath()){
forward = new ActionForward(ae.getPath());//获得默认的path
}else{
forward = mapping.getInputForward();
}
if(ex instanceof SystemException){
ActionMessage error = null;
SystemException sysExce = (SystemException) ex;
String key = sysExce.getKey(); //获得key
if( null == key){ //如果可以为空
error = new ActionMessage(ae.getKey(),sysExce.getMessage());
}else{
if(null != sysExce.getValues()){ // 可以不为空,且有参数
error = new ActionMessage(key,sysExce.getValues());
}else{
error = new ActionMessage(key);
}
}
this.storeException(request, key, error, forward, ae.getScope());
return forward;
}
return super.execute(ex, ae, mapping, formInstance, request, response); //异常不属于自定义异常类
}
}
发表评论
-
自制MVC框架:TonyMVC
2009-08-19 11:39 1625MVC框架已经使用的非常广泛了,现在我也自制一个MVC框架来加 ... -
spring MVC
2009-08-14 20:15 1117第一步:在web.xml文件中加入<listener&g ... -
hibernate中hbm详解
2009-03-31 17:32 11881. 主键( id ) Hibernate的 ... -
spring2.5 注解技术
2009-03-30 17:58 4422注释配置和 XML 配置的适用场合 是否有了这些 IOC ... -
jpa的了解
2009-03-29 19:44 11091 jpa对hibernate编程所需要引入的包: h ... -
hbm2dll的使用
2009-03-29 13:04 1222在开发过程中,我们可以先设计数据库,然后由MyEclipse自 ... -
spirng aop(非注释方式)
2009-03-04 18:40 915在某些时候,我们工程中使用的JDK 不一定就是1.5 以 ... -
dao时测试getHiberanteTemple()为null
2009-02-14 18:56 695在对写的一个DAO进行junit测试时,发现getHibera ... -
spring中读取applicationgContext.xml
2009-02-14 18:35 1003当我把spring的配置文件转移到WEB-INF目录下以后,再 ... -
Xdoclet 介绍
2009-02-11 16:25 1430Xdoclet 基本概念 我们可以在 java 代码中使用类 ... -
org.apache.commons.dbcp.BasicDataSource找不到?
2009-02-10 16:04 3093在spring的配置文件中org.apache.commons ... -
ssh整合开发
2009-02-06 11:05 12691 加入j2ee的jar包。放入lib中来 (注意,最好把ja ... -
createProxy(AbstractEntityTuplizer.java:372)异常的解决方
2009-02-06 11:00 715http://hi.baidu.com/ligong_haer ... -
Spring控制的Hibernate中代理异常
2008-12-27 19:06 823阅读全文 类别:默认分类?查看评论 -
Struts2.0学习笔记
2009-01-19 14:48 641阅读全文 类别:默认分类?查看评论 -
struts2.0学习笔记2
2009-01-20 16:36 615阅读全文 类别:默认分类?查看评论
相关推荐
主要介绍了Struts2中异常处理机制分析,涉及到了声明式异常捕捉的相关内容,以及两种异常映射的分析,需要的朋友可以参考下。
在网络中查询解决办法大多是使用异常处理的办法,其内容如下: <package name="default" extends="struts-default"> <global-results> <result name="client-abort-exception">/ignored.jsp</result> ...
8.4.4 改变异常处理的方式 8.5 小结 第九章 CVS使用指南 9.1 CVS介绍 9.1.1 CVS简介 9.1.2 为什么要使用CVS 9.2 建立CVS的开发环境 9.2.1 下载CVS 9.2.2 配置CVS 9.3 CVS的使用方法 9.3.1 添加CVS资源库 9.3.2 提交...
3.6 异常处理:exception-mapping元素 47 3.7 通配符映射 48 3.8 动态方法调用 51 3.9 对动作类进行测试 51 3.10 小结 51 第4章 OGNL 52 4.1 Value Stack栈 52 4.2 读取Object Stack里的对象的属性 53 4.3 ...
8.4.4 改变异常处理的方式 8.5 小结 第九章 CVS使用指南 9.1 CVS介绍 9.1.1 CVS简介 9.1.2 为什么要使用CVS 9.2 建立CVS的开发环境 9.2.1 下载CVS 9.2.2 配置CVS 9.3 CVS的使用方法 9.3.1 添加CVS资源库 9.3.2 提交...
3.6 异常处理:exception-mapping元素 47 3.7 通配符映射 48 3.8 动态方法调用 51 3.9 对动作类进行测试 51 3.10 小结 51 第4章 OGNL 52 4.1 Value Stack栈 52 4.2 读取Object Stack里的对象的属性 53 4.3 读取...
1 异常 javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login (/Login是你的action名字) 可能原因:action没有再struts-config.xml 中定义,或没有找到匹配的action,例如在JSP文件中使用 ...
8.4.4 改变异常处理的方式 8.5 小结 第九章 CVS使用指南 9.1 CVS介绍 9.1.1 CVS简介 9.1.2 为什么要使用CVS 9.2 建立CVS的开发环境 9.2.1 下载CVS 9.2.2 配置CVS 9.3 CVS的使用方法 9.3.1 添加CVS资源库 9.3.2 提交...
9.5 Struts异常处理 13 第10章 struts中使用国际化(i18n) 13 10.1 struts国际化程序尝试 13 10.1 Java对i18n的支持 14 10.1 struts框架中对国际化的支持 14 第11章 Validator验证框架 14 11.1 安装和配置Validator...
2.commons-io.jar(commons项目(commons项目就是java中一些常用的公共的组件)的io子项目,是处理异常的) 3.freemarker-2.3.15.jar(支持freemarker的,在webwork中也有) 4.javassist.jar(一个开源的分析、编辑...
解决方案:降低struts版本,由struts2.5降至struts2.2.1 2、源项目退出操作无响应 原因:源项目中集成shiro后只处理了登录未处理退出 解决方案:添加退出操作处理 3、解决源项目手机端无法访问问题 4、解决源项目...
2.1.9 struts 2的异常处理 52 2.2 struts 2配置精要 54 2.2.1 web.xml中struts 2的配置实现 54 2.2.2 struts 2属性配置文件struts.properties详解 55 2.2.3 struts 2核心配置文件struts.xml详解 57 2.3 struts ...
SpringMVC笔记内容:第一天(SpringMVC的概述、SpringMVC与Struts2优势分析、重要组件、运行原理、SpringMVC环境搭建、@RequestMapping注解详解、...第三天(SpringMVC异常处理、自定义拦截器、拦截器栈) --author:
使用垂直导数的多尺度水平导数(MSHDVD)方法分析了重力梯度,这排除了该区域存在断层线的情况。 振幅谱用于估计约4.8 km深度的潜在场源。 沿着50.2 km的WWS-EEN剖面应用了能够处理被噪声污染的稀疏数据的理想人体...
2.commons-io.jar(commons项目(commons项目就是java中一些常用的公共的组件)的io子项目,是处理异常的) 3.freemarker-2.3.15.jar(支持freemarker的,在webwork中也有) 4.javassist.jar(一个开源的分析、编辑...
2.commons-io.jar(commons项目(commons项目就是java中一些常用的公共的组件)的io子项目,是处理异常的) 3.freemarker-2.3.15.jar(支持freemarker的,在webwork中也有) 4.javassist.jar(一个开源的分析、编辑...
处理异常 643 Action的分类 643 Struts Action Mapping 646 使用ActionForward导航 647 Struts ActionForm Bean捕获表单数据 648 ActionForm的处理流程 649 Struts的其他组件 652 内容总结 653 独立实践 653 第三十...
JavaSE核心 异常处理、多线程基础、IO系统、网络编程、Java反射机制、JVM性能调优(JVM内存结构剖析、GC分析及调优、JVM内存参数优化)、Java泛型、JDK新特性 熟练掌握JavaSE核心内容,特别是IO和多线程;...