在Controller中创建一个异常程序
@RequestMapping("/errors") @ResponseBody public String errors() throws IOException { int i=1/0; return "成功"; }前台请求,会显示如下错误页面 这种页面是不能直接展示给用户的 静态异常页面的定义
定义未知为resources/error/ 下面 这样一旦出现错误,就会自动跳转到这个页面
同样定义在 定义未知为resources/error/ 下面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>页面找不到了</h1> </body> </html>这样出现所有的400—499的错误都会定义到4xx页面,要注意的是:如果既有400.html,又有4xx.html出现400错误的时候回优先选择400.html
动态的异常页面定义方式和静态的基本一致,可以采用的页面模板有jsp,freemarker,thymeleaf,html 动态页面也支持静态页面的表现方式,但是动态异常页面可以显示异常的原因
这里使用thymeleaf 导入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>在templates下创建 内容如下
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <table border="2"> <tr> <td>path:</td> <td th:text="${path}"></td> </tr> <tr> <td>error:</td> <td th:text="${error}"></td> </tr> <tr> <td>message:</td> <td th:text="${message}"></td> </tr> <tr> <td>timestamp:</td> <td th:text="${timestamp}"></td> </tr><tr> <td>status:</td> <td th:text="${status}"></td> </tr> </table> </body> </html>使用jsp需要配置全局的异常捕捉 新建类
package touxian_ssm.ssm.config; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @author 偷闲 * @date 2019/5/23 15:25 */ @ControllerAdvice public class Error { public static final String IMOOC_ERROR_VIEW = "error/error"; @ExceptionHandler(value = Exception.class) public Object errorHandler(HttpServletRequest reqest, HttpServletResponse response, Exception e) throws Exception { e.printStackTrace(); ModelAndView mav = new ModelAndView(); mav.addObject("exception", e); mav.addObject("url", reqest.getRequestURL()); mav.setViewName(IMOOC_ERROR_VIEW); return mav; } }创建error.jsp jsp代码如下
<head> <title>Title</title> </head> <body> <h1 style="color: red">发生错误:</h1> <div>${url}</div> <div>${exception.message}</div> </body> </html>异常页面的顺序是 发生错误->查找动态改错误页面—>查找静态改错误页面->查找动态xx错误页面->查找静态xx错误页面