04.SpringMVC中的异常处理
1.结构图
2.控制类UserController:
package cn.itcast.controller; import cn.itcast.exception.SysException; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/user") public class UserController { @RequestMapping("/testException") public String testException() throws SysException{ System.out.println("testException异常执行了....."); try { //模拟异常 int i = 1/0; } catch (Exception e) { //打印异常信息 e.printStackTrace(); //抛出自定义异常信息 throw new SysException("查询所有出错..."); } return "success"; } }
3.存储异常信息SysException
package cn.itcast.exception; /*自定义异常类*/ 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; } }
4.SysExceptionResolver处理异常(拿到异常并且处理异常):
package cn.itcast.exception; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /*自定义异常处理器*/ public class SysExceptionResolver implements HandlerExceptionResolver { /* * 当处理业务时有异常 SysException中的异常被捕获的时候, * 那么这个异常就会被抛到这个SysExceptionResolver自定义异常处理器中来 * 让我们进行处理 */ /* * ModelAndView 处理异常逻辑 */ public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception ex) { //获取到异常对象 SysException e = null; if (e instanceof SysException) { e = (SysException)ex; }else { e = new SysException("系统维护中..........."); //然后让美工写一个好的维护界面 } //创建ModelAndView对象 ModelAndView mv = new ModelAndView(); //通过对象获取信息e.getMessage() mv.addObject("errorMsg",e.getMessage()); mv.setViewName("error"); return mv; } }
5.error.jsp(有错误异常跳这个页面)
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head> <title>Title</title> </head> <body> ${errorMsg} </body> </html>
6.success.jsp(成功之后跳转)
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h>恭喜!!!跳转成功,哦吼</h> </body> </html>
7.index.jsp(首页.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h3>异常处理</h3> <a href="user/testException">点击</a> </body> </html>
8.web.xml
<!--<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >--> <web-app> <display-name>Archetype Created Web Application</display-name> <display-name>Archetype Created Web Application</display-name> <!--01.前端控制器servlet--> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!--02.映射:/表示在什么路径下都可以--> <!--可以被请求到--> <servlet-mapping> <!--05.映射到这里来使用--> <servlet-name>dispatcherServlet</servlet-name> <!--03.你拦截的路径,发任何请求都会经过这个拦截到--> <url-pattern>/</url-pattern> </servlet-mapping> <!--过滤器:解决中文乱码的过滤器--> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <!--映射过来的拦截路径--> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
9.
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <!--版本锁定:为了解决版本统一改的问题--> <spring.version>5.0.2.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> </dependencies>
10.总结:当我们的程序出现错误的时候,总是会显示在网页页面上,所以这一种开发是不好的,因此捕获该异常,然后让前端写一个好看的页面,错误出现在后台即可。