7. SpringMVC的异常处理
-
异常处理思路
1. Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServlet找异常处理器进行异常的处理。
-
SpringMVC的异常处理
1. 自定义异常类 package com.demos.exception; /** * 自定义异常类 * * @author Administrator * */ public class SysException extends Exception { // 存储提示信息的 private String message; @Override public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public SysException(String message) { this.message = message; } } 2. 自定义异常处理器 package com.demos.exception; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; public class SysExceptionResolver implements HandlerExceptionResolver { public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { // 获取到异常对象 SysException e = null; if (ex instanceof SysException) { e = (SysException) ex; } else { e = new SysException("系统正在维护...."); } // 创建ModelAndView对象 ModelAndView mv = new ModelAndView(); mv.addObject("errorMsg", e.getMessage()); // 跳转的Jsp页面 mv.setViewName("error"); return mv; } } 3. 配置异常处理器 springmvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 开启注解扫描 --> <context:component-scan base-package="com.demos"/> <!-- 视图解析器对象 --> <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean> <!--前端控制器,哪些静态资源不拦截--> <mvc:resources location="/css/" mapping="/css/**"/> <mvc:resources location="/images/" mapping="/images/**"/> <mvc:resources location="/js/" mapping="/js/**"/> <!--配置异常处理器--> <bean id="sysExceptionResolver" class="com.demos.exception.SysExceptionResolver"/> <!-- 开启SpringMVC框架注解的支持 --> <mvc:annotation-driven /> </beans> 4. 测试 1. index.jsp <h3>异常处理</h3> <a href="user/testException" >异常处理</a> 2. UserController.java package com.demos.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.demos.exception.SysException; @Controller @RequestMapping("user") public class UserController { @RequestMapping("testException") public String testException() throws SysException { System.out.println("testException执行了..."); try { // 模拟异常 int a = 10 / 0; } catch (Exception e) { // 打印异常信息 e.printStackTrace(); // 抛出自定义异常信息 throw new SysException("查询所有用户出现错误了..."); } return "success"; } }