方式一
1.1 创建全局异常类
该类要实现HandlerExceptionResolver接口,详细如下:
package com.rbc.hbms.util;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
/**
* 捕捉全局异常并输出
* @author MoXingJian
* @email 939697374@qq.com
* @date 2017年8月16日 上午10:01:40
* @version 1.0
*/
public class GobalExceptionResolver implements HandlerExceptionResolver{
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object object,
Exception ex) {
String message = ex.getMessage();
Throwable cause = ex.getCause();
System.out.println("进入全局异常");
//以下信息一般存进日志,这里作为简单测试
System.out.println("异常类型=" + ex.getClass().getSimpleName());
System.out.println("异常描述=" + message);
System.out.println("异常原因=" + cause);
/**
* 测试的时候可以把错误信息输出到页面,真正给客户使用的时候,
* 千万不要这样做,给别人印象不好,别人以为你的系统老是出问题。
* 可以适当地提示“系统繁忙”或者“你访问的页面不存在”之类的。
*/
Map<String, Object> model = new HashMap<String, Object>();
model.put("ex", ex);
/**
* 可以根据需要,不同的异常跳转到不同的页面。
* 例如,dao层异常,可以跳到“数据库异常页面”。
* service层异常,可以跳转到“业务异常页面”。
* 找不到页面异常,可以跳转到404页面。等等
*/
return new ModelAndView("error", model);
}
}
1.2 配置
在Spring配置文件中配置该类
<!-- 全局异常配置 -->
<bean id="GobalExceptionResolver" class="com.rbc.hbms.util.GobalExceptionResolver"/>
1.3 测试
在service层捕捉一个未做处理的异常
int i = 10/0;
效果如下:
方式二
在方式一的 基础上再优化
2.1配置访问路径
首先分别在类名和方法名写好访问路径
类名
@Controller
@RequestMapping("/sysmgr/gobalExceptionResolver.action")
public class GobalExceptionResolver implements HandlerExceptionResolver {
方法
@Override
@RequestMapping(params = "method=resolveException")
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object object,
Exception ex) {
2.2 异常捕捉
在web.xml配置,如下
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/sysmgr/gobalExceptionResolver.action?method=resolveException</location>
</error-page>
只要是该异常下的都会通过该路径找到。