SpringMVC学习系列(10) 之 异常处理
来源:互联网 发布:java shiro 权限控制 编辑:程序博客网 时间:2024/06/08 19:35
在项目中如何处理出现的异常,在每个可能出现异常的地方都写代码捕捉异常?这显然是不合理的,当项目越来越大是也是不可维护的。那么如何保证我们处理异常的代码精简且便于维护呢?这就是本篇要讲的内容—>异常处理。
在Spring MVC中我们可以通过以下2中途径来对异常进行集中处理:
一.继承HandlerExceptionResolver接口实现自己的处理方法,如:
public class MyHandlerExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { //添加自己的异常处理逻辑,如日志记录等 // TODO Auto-generated method stub return new ModelAndView("exception"); } }
然后在项目的配置文件中添加:
<bean id="exceptionResolver" class="所在包名.MyHandlerExceptionResolver"/>
这样就完成了异常的捕捉和处理。
二.我们介绍了第一种捕捉处理异常方式,但是第一种方式需要在配置文件中进行配置,有的时候我们会觉得配置文件内容太多太乱,那么我们就可以借助@ExceptionHandler注解来实现零配置的异常捕捉和处理。
首先,在我们项目的包com.demo.web.controllers中为controller建立一个父类BaseController,内容如下:
package com.demo.web.controllers;import java.sql.SQLException;import javax.servlet.http.HttpServletRequest;import org.springframework.web.bind.annotation.ExceptionHandler;public abstract class BaseController { @ExceptionHandler public String exception(HttpServletRequest request, Exception e) { //添加自己的异常处理逻辑,如日志记录 request.setAttribute("exceptionMessage", e.getMessage()); // 根据不同的异常类型进行不同处理 if(e instanceof SQLException) return "testerror"; else return "error"; } }
其次,修改项目中HelloWorldController让它继承于BaseController以便进行测试:
public class HelloWorldController extends BaseController{ //...内容省略}
然后,修改HelloWorldController 中的index方法,使其抛出异常,看能不能正常捕捉:
//@AuthPassport@RequestMapping(value={"/index","/hello"})public ModelAndView index() throws SQLException{ throw new SQLException("数据库异常。"); /*ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("message", "Hello World!"); modelAndView.setViewName("index"); return modelAndView;*/}
最后,在views文件夹中添加testerror.jsp视图来显示错误信息:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!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=UTF-8"><title>error!</title></head><body> ${exceptionMessage}</body></html>
运行项目:
可以看到异常已经被捕捉并显示,这样只要把我们的其它的Controller全部继承于BaseController就能实现异常的集中捕捉和处理了。
代码下载:http://pan.baidu.com/s/1c0eTseG
阅读全文
1 0
- SpringMVC 学习系列 (10) 之 异常处理
- SpringMVC学习系列(10) 之 异常处理
- SpringMVC学习系列(10) 之 异常处理
- SpringMVC学习系列(10) 之 异常处理
- SpringMVC学习系列(10) 之 异常处理
- SpringMVC学习系列(9) 之 异常处理
- SpringMVC学习(10):异常处理
- 学习SpringMVC(二十四)之异常处理
- springMVC之异常处理
- springMVC之异常处理
- springMVC之异常处理
- SpringMVC之异常处理
- SpringMVC之异常处理
- 异常处理---SpringMVC学习笔记(十)
- SpringMVC学习笔记(七)处理异常
- 异常处理---SpringMVC学习笔记(十)
- SpringMVC学习(五)--异常处理
- springMVC系列(三)——异常统一处理
- Codis源码解析——slot的分配
- [HDU
- 网易笔试:数字翻转
- 通过文本文件统计页面访问量
- 不用晶振,STM32内部HSI时钟的倍频使用
- SpringMVC学习系列(10) 之 异常处理
- 数据结构-哈希表
- Genymotion安装问题汇总
- hdu3555 Bomb (秒懂的数位dp)
- 多控制点生成贝塞尔(Bezier-Curve)样条 C语言版
- Selenium 高阶应用之WebDriverWait 和 expected_conditions
- linux(ubuntu)和windows7双系统安装
- 二进制的转换与二进制的运算
- JAVA中super详解