第一步,创建400.jsp和500.jsp,这里仅作展示,所以页面不好看,可以去网上搜罗好看的错误页面。
404.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>404</title>
</head>
<body>
<h1>404</h1>
</body>
</html>
500.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>500</title>
</head>
<body>
<h1>500</h1>
</body>
</html>
第二步,在项目的web.xml文件中配置<error-page>标签,该标签就是用来配置这些页面的。
在<location>标签中配置映射路径,这些映射路径是程序员自定义的,如/404、/500等
注意,<location>标签中也可以直接写错误页面的路径,就不需要控制器处理映射请求的转发了,如下:
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
然后可以通过<error-code>标签指定错误的响应码,这是很有效的
例如:
<error-page>
<error-code>404</error-code>
<location>/404</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500</location>
</error-page>
第三步,控制器,处理/404这种映射请求的转发跳转,其实就是将"/404"请求后跳转到"404.jsp"页面
@Controller
public class ErrorController {
@RequestMapping("/404")
public String page404(){
return "404.jsp";
}
@RequestMapping("/500")
public String page500(){
return "500.jsp";
}
}
第四步,测试如下
补充:还可以在<error-page>标签下配置<exception-type>标签,配置特定的异常才跳转错误页面。并且<exception-type>标签和<error-code>标签不能同时出现,只能二选一。
先创建一个提示异常(如IndexOutOfBoundsException)的JSP页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>IndexOutOfBoundsException</title>
</head>
<body>
<h1>IndexOutOfBoundsException</h1>
</body>
</html>
接着在web.xml中配置异常及发生异常后的跳转页面:
<error-page>
<exception-type>java.lang.IndexOutOfBoundsException</exception-type>
<location>/indexOutOfBoundsException.jsp</location>
</error-page>
在控制器类中人为制造IndexOutOfBoundsException异常
@Controller
public class IndexController {
@RequestMapping("/abc")
public void abc() {
Integer[] nums = new Integer[10];
System.out.println(nums[12]);// 人为制造IndexOutOfBoundsException异常
}
}
测试效果