自定义异常拦截器

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

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.hibernate.hql.ast.QuerySyntaxException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class ExceptionInterceptor extends AbstractInterceptor {
 private static final Logger logger = LoggerFactory.getLogger("business");
 private static final long serialVersionUID = 1L;
 @Override
 
 public String intercept(ActionInvocation invocation){
 String result = "";
 String actionName = invocation.getInvocationContext().getName();
 try {
  result = invocation.invoke();
 } catch(QuerySyntaxException ex){
  logger.error("异常拦截器拦截到异常:HQL语句出错!"+"<br>"+"action的名称为:"+actionName+"<br>"+"异常的详细信息:"+"<br>"+ex.toString());
  outString("systemHaveException");
  return null;
 }
 catch (SQLException ex){
  logger.error("异常拦截器拦截到异常:SQL语句出错!"+"<br>"+"action的名称为:"+actionName+"<br>"+"异常的详细信息:"+"<br>"+ex.toString());
  outString("systemHaveException");
  return null;

 } catch (NullPointerException ex){
  logger.error("异常拦截器拦截到异常:调用了未经初始化的对象或者是不存在的对象!"+"<br>"+"action的名称为:"+actionName+"<br>"+"异常的详细信息:"+"<br>"+ex.toString());
  outString("systemHaveException");
  return null;
 } catch (IOException ex){
  logger.error("异常拦截器拦截到异常:IO异常!"+"<br>"+"action的名称为:"+actionName+"<br>"+"异常的详细信息:"+"<br>"+ex.toString());
  outString("systemHaveException");
  return null;
 } catch (ClassNotFoundException ex){
  outString("systemHaveException");
  logger.error("异常拦截器拦截到异常:指定的类不存在!"+"<br>"+"action的名称为:"+actionName+"<br>"+"异常的详细信息:"+"<br>"+ex.toString());
  return null;
 } catch (ArithmeticException ex){
  outString("systemHaveException");
  logger.error("异常拦截器拦截到异常:数学运算异常!"+"<br>"+"action的名称为:"+actionName+"<br>"+"异常的详细信息:"+"<br>"+ex.toString());
  return null;
 } catch (ArrayIndexOutOfBoundsException ex){
  outString("systemHaveException");
  logger.error("异常拦截器拦截到异常:数组下标越界!"+"<br>"+"action的名称为:"+actionName+"<br>"+"异常的详细信息:"+"<br>"+ex.toString());
  return null;
 } catch (IllegalArgumentException ex){
  outString("systemHaveException");
  logger.error("异常拦截器拦截到异常:方法的参数错误!"+"<br>"+"action的名称为:"+actionName+"<br>"+"异常的详细信息:"+"<br>"+ex.toString());
  return null;
 } catch (ClassCastException ex){
  outString("systemHaveException");
  logger.error("异常拦截器拦截到异常:类型强制转换错误!"+"<br>"+"action的名称为:"+actionName+"<br>"+"异常的详细信息:"+"<br>"+ex.toString());
  return null;
 } catch (SecurityException ex){
  outString("systemHaveException");
  logger.error("异常拦截器拦截到异常:违背安全原则异常!"+"<br>"+"action的名称为:"+actionName+"<br>"+"异常的详细信息:"+"<br>"+ex.toString());
  return null;
 }  catch (NoSuchMethodError ex){
  outString("systemHaveException");
  logger.error("异常拦截器拦截到异常:方法末找到异常!"+"<br>"+"action的名称为:"+actionName+"<br>"+"异常的详细信息:"+"<br>"+ex.toString());
  return null;
 } catch (InternalError ex){
  outString("systemHaveException");
  logger.error("异常拦截器拦截到异常:Java虚拟机发生了内部错误!"+"<br>"+"action的名称为:"+actionName+"<br>"+"异常的详细信息:"+"<br>"+ex.toString());
  return null;
 } catch (Exception ex){
  outString("systemHaveException");
  logger.error("异常拦截器拦截到异常:程序内部错误或非常见异常!"+"<br>"+"action的名称为:"+actionName+"<br>"+"异常的详细信息"+"<br>"+ex.toString());
  return null;
 }
  return result;
 }
 public void outString(String str) {
        HttpServletResponse response = ServletActionContext.getResponse(); 
        try {
         response.setHeader("Pragma", "No-cache"); 
            response.setHeader("Cache-Control", "no-cache"); 
            response.setDateHeader("Expires", 0); 
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter(); 
            out.write(str);
            out.flush(); 
            out.close();
        } catch (IOException e) { 
         logger.error("error"+e.getMessage());
          //  e.printStackTrace(); 
        } 
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值