- 浏览: 38734 次
- 性别:
- 来自: 北京
文章分类
在Struts1.X的版本中加入了对异常的处理,Exception Handling,有了它就不需要我们用try/catch等捕获异常,一旦出现了我们已经定义的异常那么就会转到相应得页面,并且携带定制的信息。STRUTS框架提供了默认的异常处理org.apache.struts.action.ExceptionHandler,他的execute()方法负责处理异常。在需要实现自定义处理时重写方法,可以在配置文件定义由谁来处理Action类中掷出的某种异常。
Struts框架处理异常的流程
struts的控制器负责捕获各种异常,包括控制器运行中本身抛出的异常,以及调用模型的业务方法时抛出的异常。当struts的控制器捕获到异常后,在异常处理代码块中,创建描述信息的actionmessage对象把它保存在acionmessages(或其子类actionerrors)对象中,然后把ACTIONMESSAGES保存在特定范围(配置文件中的scope)。然后可以用<html:errors>检索特定范围内的actionmessages对象。
下面是一个全局的处理类的例子:
首先介绍<global-exception>元素:
<global-exceptions>//元素可以包含一个或者多个<exception>元素
<exception
className=""//指定和元素对应的配置类,默认的不用动
bundle=""//Resource Bundle
key="..." // <message-resources parameter="MessageResources" />中的key
type="java.lang.Exception"//指定需要处理异常类的名字,必须
handler="com.myHander.SystemExceptionHandler"指定异常处理类默认是ExceptionHandler,
path="/pub_exception.jsp"//指定当前异常发生的时候转发的路径
scope="request"//指定ActionMessages实例存放的范围
......
>
</exception>
</global-exceptions>
2,定义自己的异常类:SystemException
package com.ex;
public class SystemException extends RuntimeException {
private String key;//得到本地资源文件key
private Object[] values;
public SystemException() {
super();
}
public SystemException(String message, Throwable arg1) {
super(message, arg1);
}
public SystemException(String message) {
super(message);
}
public SystemException(Throwable message) {
super(message);
}
public SystemException(String key,String message, Throwable arg1) {
super(message, arg1);
this.key = key;
}
public SystemException(String key,Object value) {
super();
this.key = key;
values = new Object[]{value};
}
public SystemException(String key,Object value1,Object value2) {
super();
this.key = key;
values = new Object[]{value1,value2};
}
public SystemException(String key,Object[] values) {
super();
this.key = key;
this.values = values;
}
public String getKey() {
return key;
}
public Object[] getValues() {
return values;
}
}
定义自己的异常类处理类:SystemExceptionHandler,extendExceptionHandler,覆盖execute方法,处理自己的异常类,其他的异常有父类自己处理
package com.ex;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.Globals;
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;
import com.ex.SystemException;
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;
ActionMessage error = null;
String property = null;
if (ae.getPath() != null) {//配置文件中的path
forward = new ActionForward(ae.getPath());
} else {
forward = mapping.getInputForward();//如果没有找到path,转到input配置的路径
}
this.logException(ex);
//处理自定义的异常类SystemException
if(ex instanceof SystemException){
SystemException se = (SystemException)ex;
//如果只有message,而没有key
if(se.getKey() == null){
error = new ActionMessage(ae.getKey(), ex.getMessage());
property = ae.getKey();
}else{ //SystemException中有key值
error = new ActionMessage(se.getKey(),se.getValues());
property = se.getKey();
}
request.setAttribute(Globals.EXCEPTION_KEY, ex);
this.storeException(request, property, error, forward, ae.getScope());
return forward;
}
return super.execute(ex, ae, mapping, formInstance, request, response);
}
}
struts-config.xml中配置:
<global-exceptions>
<exception
type="java.lang.Exception"
handler="com.ex.SystemExceptionHandler"
path="/pub_exception.jsp"
scope="request"
>
</exception>
</global-exceptions>
3,pub_exception.jsp页面;
获得异常:<html:errors/>//当然:引入<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %>
4,测试:TestHander(业务逻辑类)
package com.ex;
import com.ex.SystemException;
public class TestHander {
public void test(int t){
if(t>2){
throw new SystemException("不能大于2!");
//或者throw new SystemException("testkey",t);调用SystemException中的SystemException(String key,Object value) 构成方法得到资源文件定义的信息,当然 在MessageResources.properties文件里加上testkey= {0} con't greater than 2!当然还要加上 <message-resources parameter="MessageResources" />
}
}
}
5,Action类:调用TestHander的test方法:
(主要代码) new TestHander().test(3);
6,jsp调用acyion页面页面:
<a href="testhander.do">异常</a>
一点击就会转向pub_exception.jsp页面显示:不能大于2!
发表评论
-
Tomcat解决URL传中文的方法
2007-09-28 19:03 892在TOMCAT-HOME/conf/server.xm ... -
介绍两个jsp上传组件commons-fileupload和SmartUpload(部分来自网页)
2007-09-28 21:39 1105第1个上传组件commons-fileupload ==== ... -
仍一个能增减行的javascript
2007-10-08 18:52 742<html><head> <s ... -
jFreeChart(动态web应用)
2007-10-09 14:12 763JFreeChart 1.0.2的动态应用,根据数据库中的 ... -
jFreeChart初探(静态应用)
2007-10-09 14:17 591初学JFreeChart,整理一个例子:(部分来自网页) ... -
初探tomcat连接池
2007-10-11 18:30 551相关工具: tomcat版本5.5 ,mysql,drp(数据 ... -
初探struts中的(Converter)的一个例子
2007-10-18 19:09 584Struts中的Converter可以将一些特定对象转换成字符 ... -
other
2007-10-19 18:23 649最近正在抽时间研究jive的源代码,如果有谁想 ... -
struts(il8n)实现国际化的一个例子
2007-10-19 20:45 833struts利用在session中放一个local对象来 ... -
struts中自定义taglib函数例子
2007-10-21 12:43 646首先建立自己的函数:package com.struts; ... -
一个从另一个打开页面返回值的javascript例子
2007-11-16 14:52 777今天写项目的时候用到了需要从另一个打开页面取值的j ... -
DWR学习及应用
2007-11-25 20:31 646DWR是一个开源的类库,可以帮助开发人员开发包含AJAX技术 ... -
java群
2007-12-03 20:25 63刚健了一个java群,用于大家互相探讨java,共同促进学习, ... -
ibatis学习(三)---ibatis与spring的整合
2007-12-07 18:26 2002Spring通过DAO模式,提供了对iBATIS的良好支持 ... -
ibatis学习(二)--ibatis使用介绍
2007-12-07 18:27 717SqlMapClient对象 这个对象是iBatis操作 ... -
ibatis学习(一)--ibatis介绍以及用例
2007-12-07 18:31 649介绍 iBATIS是以SQL为中 ... -
dwr实现级联菜单
2007-12-08 10:39 790Dwr的介绍请见:http://www.blogjava. ... -
JSF学习及应用一-(安装配置)
2007-12-11 09:38 734JSF(JavaServer Faces) JSF是JA ... -
JSF学习及应用二-(用例)
2007-12-11 09:41 568实例1 1、 创建一个JSP 2、 在相同的路径下,用. ... -
JSF学习及应用三-(与spring整合)
2007-12-11 09:46 658JSF与Spring整合的原理是获得彼此的上下文引用,以此 ...
相关推荐
另外,你还可以通过继承`org.apache.struts.action.ExceptionHandler`接口来自定义异常处理器,这允许你在整个应用程序范围内统一处理异常,而不仅仅是单个Action。 此外,对于Struts1.x中与Action相关的异常,如`...
除了基本的异常处理,还可以利用Struts提供的拦截器进行更高级的错误处理。比如,可以创建一个自定义拦截器,记录错误日志、提供统一的错误页面,或者在特定条件下重定向用户。 为了实现友好错误提示,我们需要确保...
Struts提供了全局异常处理机制,通过配置ActionError和ExceptionHandler,可以统一处理运行时异常,提高系统的健壮性。 八、Validator验证框架 Struts的Validator组件用于校验用户输入,可以自定义验证规则,并在...
局部异常处理则在Action类中通过@ExceptionHandler注解指定。 八、最佳实践 1. 使用ActionSupport基类,它提供了默认的错误处理和字段验证。 2. 尽量避免在Action中直接写业务逻辑,而是将业务逻辑封装在Service层...
- **Struts2**:通过全局异常拦截器或在Action类中定义通用异常处理方法来捕获和处理异常。 8. **日志和调试** - **日志框架**:如Log4j、SLF4J和Logback,用于记录异常信息,便于追踪问题。合理设置日志级别和...
7. **异常处理**:Struts提供了一套强大的异常处理机制,通过全局的ExceptionHandler或者在struts-config.xml中配置ActionMapping的exception属性,可以对各种异常进行统一处理。 8. **Tiles框架集成**:Tiles是一...
在Spring中,可以使用@ControllerAdvice和@ExceptionHandler进行全局异常处理;而在Struts中,可以配置全局的ExceptionMapping来捕获并处理异常。 - 在集成环境中,需要协调两者之间的异常处理,确保整个应用程序的...
- Struts支持全局的异常处理机制,可以在struts-config.xml中配置全局的ExceptionHandler。 8. **国际化与本地化**: - Struts支持多语言,可以通过资源包(properties文件)实现不同语言环境下的显示。 9. **...
可以通过`@ExceptionHandler`和`@ActionError`注解来处理Action中的异常和错误。 这个DEMO展示了Struts2框架如何在没有XML配置文件的情况下运行,通过注解实现Action、结果映射、拦截器和其他核心功能。这对于理解...
此外,Struts还提供了异常处理机制,通过全局的ExceptionHandler来捕获并处理应用程序中的异常。 Struts2是Struts的升级版,它增强了功能,如更强大的表达式语言(OGNL),以及更灵活的拦截器(Interceptor)体系,...
12. **异常处理**:Struts框架提供了全局异常处理机制,可以在struts-config.xml中配置全局的ExceptionHandler来捕获并处理异常。 13. ** strut2-json-plugin**:Struts2提供了JSON插件,使应用程序能够方便地处理...
- **Handler**:指定异常处理类,通常是继承自`org.apache.struts.action.ExceptionHandler`的自定义类。 - **Key**:指定异常消息的国际化资源键。 - **Path**:异常发生时的转发路径。 - **Scope**:指定...
Struts提供了一种统一的异常处理机制,通过定义全局的ExceptionHandler,可以捕获并处理应用程序中的异常,提高错误处理的规范性和一致性。 9. **Struts与Spring的整合** 在现代的企业级应用中,Struts通常与...
3. **异常处理**:使用`@ExceptionHandler`或全局异常处理类捕获并处理应用中的异常。 4. ** Tiles框架集成**:用于创建复杂的页面布局,每个部分可以由单独的Action处理。 5. **AJAX支持**:Struts2的JSON插件使得...
- **Action级别异常处理**: 在Action类中使用`@ExceptionHandler`注解或自定义Result类型来处理特定的异常。 通过这些章节的学习,你可以深入理解Struts2的工作原理,掌握如何编写Action、配置Struts2、利用拦截器...
7. **异常处理**:通过配置全局的ExceptionHandler,Struts可以捕获和处理运行时异常,提供统一的错误页面。 8. **拦截器(Interceptor)**:Struts 2引入了拦截器机制,允许在Action执行前后插入自定义逻辑,如...
可以通过配置全局结果(global results)来处理未捕获的异常,或者在Action类中定义异常处理方法,配合`@ExceptionHandler`注解。 10. **Struts 2与其他技术的集成** Struts 2 能很好地与Spring、Hibernate等其他...
可以通过`<global-exception-mappings>`标签定义全局异常处理,以及在Action中使用`@ExceptionHandler`注解处理特定异常。 综上所述,Struts2配置涉及多个方面,包括Action、拦截器、结果类型、常量、注解和异常...
6. **异常处理**:Spring 提供了统一的异常处理机制,可以与 Struts 的 ExceptionHandler 结合,实现更精细的错误处理。 整合 Spring 和 Struts 可以利用两者的优点,如 Spring 的 DI 和 AOP 功能,以及 Struts 的 ...
异常处理在 Struts 1.1 版本中得到了增强,提供了声明式的异常处理机制。默认的 ExceptionHandler 类会捕获 Action 类中的异常,将 ActionError 对象存储在 JSP 可访问的范围内,从而可以在视图层展示错误信息。...