`
a275924501
  • 浏览: 1758 次
  • 性别: Icon_minigender_1
  • 来自: 邯郸
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用struts2拦截器与struts自定义异常构建自定义提示信息

阅读更多

1.我写这段代码实现的愿望,ssh验证提示使用的不是很顺手,可能是我用的不太熟悉吧,最后我考虑了一下自己的SSH消息提示信息。主要是通过struts2中的自定义异常与strut2的拦截器实现消息提示。

2.拦截器中分为两种异常一种为系统中已经定义好的异常,处理方式为直接转跳到一个固定页面进行友好提示,第二种方式为自定义系统中的消息提示。如下提出代码:

自定义异常类:

package com.finance.exception;

import com.finance.util.ApplicationContextUtils;
import com.finance.util.PropertiesUtils;

/**
 * 请求运行时异常
 * 
 * @author guyw
 *
 * 2014-3-9
 */
public class AppContextException extends RuntimeException{
	
	/**
	 * 根据状态判断错误
	 * @param sate 错误状态
	 * @param message 错误信息
	 */
	public AppContextException(String state,String message) {
//		PropertiesUtils propertiesUtils=(PropertiesUtils) ApplicationContextUtils.getApplicationContext().getBean("propertiesUtils");
//		String errorMessage=(String) propertiesUtils.getProperties().get(state);
		super(state+":"+message);
	}
	/**
	 * 根据状态判断错误
	 * @param sate 错误状态
	 */
	public AppContextException(String state) {
//		PropertiesUtils propertiesUtils=(PropertiesUtils) ApplicationContextUtils.getApplicationContext().getBean("propertiesUtils");
//		String errorMessage=(String)propertiesUtils.getProperties().get(state);
		super(state);		
	}
}

  自定义:拦截器

 

package com.finance.intercepter;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;
import org.springframework.dao.DataAccessException;

import com.finance.exception.AppContextException;
import com.finance.util.ApplicationContextUtils;
import com.finance.util.PropertiesUtils;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

/**
 * 
 * 全局异常拦截器
 * 
 * @author guyw
 * 
 *         2014-3-9
 */
public class AppContextExceptionIntercepter implements Interceptor {
 
	private static final long serialVersionUID = 1L;
	
	private String errorMessage;
	@Override
	public void destroy() {

	}

	@Override
	public void init() {
		
	}

	@Override
	public String intercept(ActionInvocation invocation) {
		ActionContext ctx = invocation.getInvocationContext();  
        HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);
        String result=null;
		try {
			  result=invocation.invoke();
		} catch (DataAccessException ex) {
			throw new AppContextException("10001", "数据库操作失败!");
		} catch (NullPointerException ex) {
			throw new AppContextException("10001", "调用了未经初始化的对象或者是不存在的对象!");
		} catch (IOException ex) {
			throw new AppContextException("10001", "IO异常!");
		} catch (ClassNotFoundException ex) {
			throw new AppContextException("10001", "指定的类不存在!");
		} catch (ArithmeticException ex) {
			throw new AppContextException("10001", "数学运算异常!");
		} catch (ArrayIndexOutOfBoundsException ex) {
			throw new AppContextException("10001", "数组下标越界!");
		} catch (IllegalArgumentException ex) {
			throw new AppContextException("10001", "方法的参数错误!");
		} catch (ClassCastException ex) {
			throw new AppContextException("10001", "类型强制转换错误!");
		} catch (SecurityException ex) {
			throw new AppContextException("10001", "违背安全原则异常!");
		} catch (SQLException ex) {
			throw new AppContextException("10001", "操作数据库异常!");
		} catch (NoSuchMethodError ex) {
			throw new AppContextException("10001", "方法末找到异常!");
		} catch (InternalError ex) {
			throw new AppContextException("10001", "Java虚拟机发生了内部错误");
		}
		catch (AppContextException ex) {
			PropertiesUtils propertiesUtils = (PropertiesUtils) ApplicationContextUtils.getApplicationContext().getBean("propertiesUtils");
			String state=ex.toString();
			String message=(String) propertiesUtils.getProperties().get(state);
			if(errorMessage!=null){
				errorMessage=state+","+message;
			}else{
				errorMessage=state;
			}
			request.setAttribute("errorMessage",errorMessage);
			return "success";
		}
		catch (Exception ex) {
			throw new AppContextException("10001", "程序内部错误,操作失败!");
		}
		
		return "exceptionErrorMessage";
	}
}

 如上红色代码 return "success"; 此处有一个疑问 如果在Action中抛出异常后拦截器捕获后返回结果集为 404错误,不知道改则么处理:错误页面代码:

HTTP Status 404 - result 'null' not found


type Status report

message result 'null' not found

description The requested resource (result 'null' not found) is not available.


Apache Tomcat/6.0.13

 PropertiesUtils 为一些自定义的消息固定提示信息key-value 比如:10001=登录失败!。

使用方式为 此处有一个上传功能:

/**
	 * 保存合作机构
	 * @return
	 */
	public String saveOrg(){
		if(true){
			
			throw new AppContextException("10001", "上传文件错误!");
		}
		return SUCCESS;
	}

 这样就能构建全局的消息提示信息。新手发帖赶紧喷吧。

请教问题:如上红色代码 return "success"; 此处有一个疑问 如果在Action中抛出异常后拦截器捕获后返回结果集为 404错误,不知道改则么处理,是不是如果在Action抛出异常后,在拦截器中返回的结果集与Action的拦截器就无关了?

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics