使用Spring MVC的统一异常处理器

转自:https://www.jianshu.com/p/20dd0d28c758

使用Spring MVC的统一异常处理器

Spring MVC定义了异常的统一处理机制,其工作原理是:

Spring MVC统一异常处理流程.png

不管是应用程序的哪里出现异常,都向上层抛出异常,最后异常被提交到Spring MVC的Dispatcher Servlet中,Dispatcher Servlet在调用系统统一的异常处理器来处理异常。

借助Spring MVC的异常处理机制,我们通过实现HandlerExceptionResolver接口来定义我们自己的异常处理器,然后在异常处理器里使用log4j对所有的异常进行统一的处理,这样我们就不需要向上面一样在每个可能出现异常的地方都是用try..catch来记录异常。

实现自己的异常处理器:
MyExceptionHandler.java

package exceptionHandler;

import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/** 
* Created by xiangang on 2016/11/25. 
*/

public class MyExceptionHandler implements HandlerExceptionResolver {    

  private static final Logger logger = Logger.getLogger(MyExceptionHandler.class);   
 
 /** 
  * 通过实现借口HandlerExceptionResolver的resolveException方法,
  * 来完成日志的记录,而且还可以指定程序发生错误后跳转的web页面
  */
 @Override    
  public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {          
    logger.error("",ex);        
    return new ModelAndView("error").addObject("exception",ex);    
  }
}

在Spring MVC的配置文件里通过bean声明注册到IoC容器,

省略了其他的配置信息
<!--配置自定义异常处理类-->
<bean id="handlerExceptionResolver" class="exceptionHandler.MyExceptionHandler"/>

修改我们Service层中的方法:
ValidateName.java

package service;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

/** 
* Created by xiangang on 2016/11/25. 
*/

@Service
public class ValidateName {   
  private static final Logger logger = Logger.getLogger(ValidateName.class);    
  public boolean validation(String name) {        
    boolean flag = false;       
    //故意设置为空,以便抛出异常        
    String storedName = null;      
  
    if (storedName.equals(name)){                
      flag = true;               
      return flag;            
    }else {                
      return flag;            
    }        
  }
}

配置发生错误时的页面:
error.jsp

<%--  
Created by IntelliJ IDEA.  
User: xiangang  
Date: 2016/11/25  
Time: 下午1:40  
To change this template use File | Settings | File Templates.
--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>    
<title>错误页面!</title>
</head>
<body>
<h1>不好意思,你请求的页面被怪兽吃掉了!</h1>
</body>
</html>

在相关的Controller里面调用Service层中的这个方法,配置本地服务器,运行应用程序,得到如下页面:

出现错误后的跳转页面

对应的日志文件记录的错误日志:

程序运行出现错误的日志

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值