springMVC系列(三)——异常统一处理
来源:互联网 发布:搜狗关键词优化排名 编辑:程序博客网 时间:2024/05/20 02:24
介绍
在开发中,常会出现各种各样的异常,我们不可能对每个异常都进行处理,那样工作量不仅大,而且不易改动,这就需要对异常进行统一处理,如给出错误提示、打印日志、跳转错误页面等。
SpringMVC处理异常的方式有
1.配置使用SpringMVC的简单异常映射解析器SimpleMappingExceptionResolver,它的作用是把异常解析映射成配置的页面
2.使用自定义的处理异常解析器,需要实现HandlerExceptionResolver。
3.使用@ExceptionHandler(异常处理器)注解实现异常处理
前两种对代码没有侵入型,第一种只是简单映射异常和页面,第二种可以对异常进行处理
实现
实现项目
Jar包
项目结构
自定义异常
ServiceException
public classServiceException extends RuntimeException { private static final long serialVersionUID= 1L; public ServiceException(Strings) { super(s); }}ControllerException
public classControllerException extends RuntimeException { private static final long serialVersionUID= 1L; publicControllerException(String s) { super(s); }}Controller
@Controller@RequestMapping("")public classTestController { @Autowired(required=false) private TestService testService; @RequestMapping("exp") public String exp(String id) throws Exception { testService.thorwServiceException(id); if("1".equals(id)) { throw new ControllerException("controller exception"); } return "exp"; }}Service
@Servicepublic classTestService { public voidthorwServiceException(String id) throwsException { if("2".equals(id)) { throw new ServiceException("service异常"); } }}exp.jsp
<%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title></title></head><body> <p><a href="exp?id=1">controller抛异常</a></p> <p><a href="exp?id=2">service抛异常</a></p></body></html>
使用简单异常映射解析器SimpleMappingExceptionResolver
在SpringMVC配置文件中加上
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!-- 定义默认的异常处理页面,当该异常类型的注册时使用 --> <property name="defaultErrorView" value="error"></property> <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception --> <property name="exceptionAttribute" value="ex"></property> <!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常页名作为值,会跳转到对应的异常页面 --> <property name="exceptionMappings"> <props> <prop key="com.lc.exception.ControllerException">error-contl</prop> <prop key="com.lc.exception.ServiceException">error-service</prop> <!-- 这里还可以继续扩展对不同异常类型的处理 --> </props> </property> </bean>
运行、效果
使用自定义异常处理解析器
新建EcpHandler类
public classEcpHandler implements HandlerExceptionResolver { @Override public ModelAndViewresolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exceptionex) { Map<String,Object> model= newHashMap<String, Object>(); model.put("ex", ex); if(ControllerException.class.isInstance(ex)) { return new ModelAndView("error-contl",model); }elseif(ex instanceofServiceException) { return new ModelAndView("error-service", model); } else { return null; } }}
在springMVC配置中注册
<bean id="excpHandler"class="com.lc.exception.EcpHandler"/>运行、效果
@ExceptionHandler这种方式不太常用,故不介绍
总结
使用简单异常映射解析器SimpleMappingExceptionResolver,优点集成是简单,方便、对代码没有入侵性,缺点是不能进行复杂的操作,如记录异常日志。
使用自定义异常处理解析器集成是简单,方便、对代码没有入侵性、也可以对异常进行自定义的处理操作。
参考资料
1.http://blog.csdn.net/ufo2910628/article/details/40399539
阅读全文
0 0
- springMVC系列(三)——异常统一处理
- springmvc统一异常处理
- SpringMVC异常统一处理
- SpringMVC统一异常处理
- springMVC统一异常处理
- springmvc 统一处理异常
- springmvc 统一异常处理
- springmvc 统一异常处理
- springmvc异常统一处理
- springMVC异常统一处理
- SpringMVC异常统一处理
- springMVC异常统一处理
- SpringMVC统一异常处理
- SpringMVC统一异常处理
- springmvc统一异常处理
- springmvc异常统一处理
- springmvc 统一处理异常机制
- SpringMVC 统一异常处理入口
- 反射中Class.forName()和ClassLoader.loadClass()的区别
- 套接字(全双工)实现进程间通信
- 583. Delete Operation for Two Strings
- 最长递增子序列
- Spring Boot学习(四)
- springMVC系列(三)——异常统一处理
- ubuntu 安装 repo 记录
- redis操作
- 【转】整理:深度学习 vs 机器学习 vs 模式识别
- Spring详解
- 一步一步学MySQL---18 MySQL常用函数(1)
- Activity与Fragment通信 多接口实现优化
- Shell脚本编程基础 四 更多的结构化命令
- 版本控制工具:SVN和Maven的区别