`
java_mike
  • 浏览: 85261 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Struts1x项目开发中的统一异常处理

阅读更多
      在项目开发中如果能使用统一异常处理的话,则不但可以简化开发过程,而且还更容易团队的开发与合作,事半功倍。以下通过使用struts1X 结合实现一个项目的统一异常处理解决方案的例子:

第一步:
  配置好Struts整合web。

第二步:
  编写统一异常类:SystemException.java
package com.changtu.oa.managers;
/**
 * 统一异常类
 * 用于存储异常信息,供抛出
 * @author Mike
 */
public class SystemException extends RuntimeException {
	//异常代码
	private String key;
	private Object[] values;
	// 构造器重载
	public SystemException() {
		super();
	}
	public SystemException(String message, Throwable throwable) {
		super(message, throwable);
	}
	public SystemException(String message) {
		super(message);
	}
	public SystemException(Throwable throwable) {
		super(throwable);
	}
	public SystemException(String message,String key){
		super(message);
		this.key = key;
	}
	public SystemException(String message,String key,Object value){
		super(message);
		this.key = key;
		this.values = new Object[]{value};
	}
	public SystemException(String message,String key,Object[] values){
		super(message);
		this.key = key;
		this.values = values;
	}
	public String getKey() {
		return key;
	}
	public Object[] getValues() {
		return values;
	}
}



  编写统一异常处理类:SystemExceptionHandler.java
package com.changtu.oa.web;
…
import com.changtu.oa.managers.SystemException;

/**
 * 统一异常处理类
 * @author Mike
 */
public class SystemExceptionHandler extends ExceptionHandler {
	private static Log logger = LogFactory.getLog(SystemExceptionHandler.class);
	/**
	 * 处理SystemException异常
	 */
	@Override
	public ActionForward execute(
			Exception ex, 
			ExceptionConfig ae, 
			ActionMapping mapping, 
			ActionForm formInstance, 
			HttpServletRequest request, 
			HttpServletResponse response) throws ServletException {
		
		ActionForward forward = null;
		if(ae.getPath() != null){
			forward = new ActionForward(ae.getPath());
		}else{
			forward = mapping.getInputForward();
		}
		
		logger.debug("出现异常", ex);
		
		// 在控制台显示的异常信息
		ex.printStackTrace();
		
		// 如果抛出的异常是自定义的统一异常
		if(ex instanceof SystemException){
			SystemException se = (SystemException)ex;
			
			//取出key值
			String key = se.getKey();
			
			// 储存异常信息......
			ActionMessage error = null;
			if( key == null){
				error = new ActionMessage(ae.getKey(),se.getMessage());
			}else{
				if(se.getValues() != null){
					error = new ActionMessage(key,se.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);
	}

}



第三步:
  编写struts配置文件:
    1、在src目录下新建文件名为:MessageResources.properties 资源文件,内容如下:
       errors.detail={0}
    2、struts-config.xml配置文件信息如下:
   
    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
	
	<!-- 统一异常处理 -->
	<global-exceptions >
		<exception 
			key="errors.detail" 
			type="java.lang.Exception"
			path="/common/exception.jsp"
			scope="request"
			handler="com.changtu.oa.web.SystemExceptionHandler"
		></exception>
	</global-exceptions>
	
	<action-mappings>
		
		
	</action-mappings>
	<!-- 加载国际化资源文件 -->
	<message-resources parameter="MessageResources" /> 	
</struts-config>
    


第四步:编写业务逻辑:UserManager.java  UserManagerImple.java
  UserManagerImpl.java
 
   package com.changtu.oa.managers.impl;
   //...

public class UserManagerImpl implements UserManager {
      
      // 登陆
      public User login(String username, String password) {

		/**
		 * 因为设置了User的auto-import="false",所以,在这里使用
		 * HQL查询的时候,必须使用全路径的类名
		 */
		User user = (User)getSession().createQuery(
				"select u from com.changtu.oa.model.User u where u.username = ?")
			.setParameter(0, username)
			.uniqueResult();
		
		if(user == null){
			throw new SystemException("没有这个用户");
		}
		
		if(!user.getPassword().equals(password)){
			throw new SystemException("密码错误!");
		}
		
		return user;
	}
}
  



第五步:异常页面 exception.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@include file="/common/common.jsp" %>
<!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>
<html:errors/>
</body>
</html>


第六步:编写自己的Action进行测试。在Action中出自定义的异常时,struts会自动根据你的配置跳转到异常界面,显示异常信息。(其中有不完整的,需自己补充)





0
0
分享到:
评论
1 楼 gongmingwind 2010-08-27  
写的非常好,多谢多谢

相关推荐

    struts1.x 异常处理机制

    此外,对于Struts1.x中与Action相关的异常,如`org.apache.struts.action.ActionException`,你可以在Action类中直接抛出,框架会自动处理这些异常,并根据`struts-config.xml`中的配置进行相应操作。 总结来说,...

    java Struts 1.x 框架 Web 开发

    8. **异常处理**:通过配置全局异常处理,Struts 1.x 可以捕获并处理应用程序中抛出的异常,提供统一的错误页面,增强了用户体验。 9. **Validator框架**:Struts 1.x 的Validator框架用于数据验证,可以定义一系列...

    struts1.x apps 所有最新的Struts1.x项目应用

    3. **良好的异常处理**:Struts1.x提供了统一的异常处理机制。 4. **丰富的标签库**:简化JSP页面的编写,提高开发效率。 然而,尽管Struts1.x在当时具有广泛的应用,但它也有一些限制和已知的安全问题,比如著名的...

    struts1,struts教程,struts1.x入门

    8. **异常处理**:Struts1提供了一种机制来捕获和处理应用中的异常,可以通过全局的Exception Mapping来定义。 9. ** strut1.x的扩展性**:如Tiles框架可以与Struts1集成,实现更复杂的页面布局和模板重用。 10. *...

    Struts1.x_action

    6. **异常处理**:通过`global-exceptions`配置,Struts1.x可以捕获并处理全局范围内的异常,提供统一的错误页面,增强了应用的健壮性。 7. **拦截器(Plug-ins)**:虽然Struts1.x的拦截器功能相对较弱,但仍然...

    三大框架中文文档中的struts2.0开发手册(程序员必看)

    Struts2.0是Java Web开发中非常重要的一个MVC框架,它是在原有的Struts1.x基础上进行改进和发展而来的。这个"三大框架中文文档中的struts2.0开发手册"为程序员提供了一份详尽的参考资料,帮助他们理解和掌握Struts...

    Struts1.x.rar

    8. **异常处理**:通过定义全局异常映射,Struts1.x可以统一处理应用程序可能出现的错误和异常,提高用户体验。 9. **安全考虑**:购物网站需要考虑安全性问题,如防止SQL注入、XSS攻击等。Struts1.x可以通过配置和...

    Struts1.x使用回顾

    Struts1.x提供了一套异常处理机制,可以捕获和处理Action执行过程中的异常,统一返回错误页面,增强程序的健壮性。 总结,Struts1.x作为早期流行的Java Web框架,它的设计思想和实现方式对后来的框架有着深远影响。...

    struts2开发文档

    5. **Struts2的异常处理**: 通过配置全局或局部异常映射,可以统一处理异常,提供更好的用户体验。 6. **主题和皮肤**: Struts2支持多种UI主题,可以改变应用的外观和样式。 7. **国际化**: Struts2提供国际化的...

    struts-2.1.8-apps 所有最新的Struts2.x开发应用

    7. **异常处理**:Struts2提供了全局的异常处理机制,可以统一处理程序运行时可能出现的异常,提高了系统的健壮性。 在"struts-2.1.8"子文件夹中,我们可以期待找到以下内容: - **源代码**:展示如何组织和实现一...

    struts1-core.jar

    Struts1是一个经典的Java Web开发框架,由Apache软件基金会维护,它主要负责处理MVC(Model-View-Controller)架构中的Controller部分。标题中的"struts1-core.jar"是Struts1的核心库文件,它包含了实现框架核心功能...

    Struts1.x系列教程文档【技术文档】

    8. **异常处理**:通过定义全局的异常处理配置,Struts1能够统一处理应用程序中的异常,提供友好的错误提示。 9. **预定义结果类型(Forward与Redirect)**:在struts-config.xml中,可以设置Action的forward和...

    struts 2.x docs 所有最新开发文档

    Struts 2 是一个强大的、基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它在Struts 1的基础上进行了大量的改进和增强,提供了更灵活、功能更全面的开发体验。Struts 2.x 文档是开发者的重要参考...

    struts2权威指南光盘源码-第18章源码

    - 错误处理:通过全局结果和异常处理机制,可以统一处理应用中的错误和异常。 通过深入研究这些源码,开发者可以更好地理解Struts2框架的工作原理,学习如何在实际项目中实现Struts2与Struts1的集成,以及如何利用...

    struts1.3.10

    7. **Exception Handling**:Struts提供了一种统一的方式来处理应用程序中的异常,通过配置文件定义不同的异常处理策略。 8. **预定义的标签库**:Struts提供了JSP标签库,如logic、bean、html和tiles等,简化了...

    Struts2轻松入门,Struts2总结

    4. **异常处理**:Struts1.x的异常处理不够直观,而Struts2提供了全局异常处理和自定义异常处理策略。 5. **扩展性**:Struts2通过拦截器实现了更好的扩展性,方便添加新的功能或修改现有行为。 6. **视图技术**:...

    自己制作的类似Struts1.x 简单web框架

    标题中的“自己制作的类似Struts1.x 简单web框架”暗示了这是一个个人开发的Web应用程序框架,它的设计灵感来源于经典的Java EE框架——Struts1.x。Struts1.x是一个广泛使用的开源MVC(Model-View-Controller)框架...

    struts 2.0

    Struts 2.0是Java Web开发中的一个关键框架,它是Apache软件基金会的顶级项目,融合了原本独立的Struts 1.x和WebWork框架的优势,为开发者提供了一个强大、灵活且可扩展的MVC(Model-View-Controller)架构。...

    Struts 1.3.8jar包

    7. **Exception Handling**: Struts 提供了全局的异常处理机制,可以在 struts-config.xml 中配置 Exception Handler,统一处理未被捕获的异常,提高了应用的健壮性。 8. **Plug-ins**: Struts 1.3.8 可以通过插件...

    struts2下载地址

    6. **强大的异常处理机制**:通过配置异常处理拦截器,可以统一处理应用中的各种异常情况。 #### 三、Struts2下载地址及版本选择 根据题目中提供的部分信息,我们可以得知Struts2的官方下载地址为:...

Global site tag (gtag.js) - Google Analytics