errorPage指定若当前页面出现错误的实际响应页面是什么。其中 / 表示的是当前 web 应用的根目录。
语法 :
<%@ page errorPage="/error.jsp" %>
在响应error.jsp 时,jsp引擎使用的是请求转发的方式。
isErrorPage 指定当前页面是否为错误处理页面,可以说明当期页面是否可以使用 exception 隐藏属性。
需要注意的是 ,若指定 isErrorPage=”true” ,并使用 exception 打方法了。一般不建议能够直接访问该页面。
语法:error.jsp前加入以下代码
<%@ page isErrorPage="true" %>
那么问题来了,如何使用户不能直接访问一个页面呢?
对于tomcat服务器而言, WEB-INF 下的文件是不能通过在浏览器中直接输入地址的方式来访问 的,但是可以通过请求转发的方式。
代码示例:
首先在web根目录下新建一个 a.jsp 的测试文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page errorPage="/WEB-INF/error.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= new Date() %>
//这一块除数为0,会报错
<%= 10/0 %>
</body>
</html>
可以看到< body> 中 出现了< %= 10/0 %>
除数为0,所以会出现异常这个错误页面。会将其转发到 WEB-INF 目录下的 error.jsp
error.jsp 代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>error page</title>
</head>
<body>
error page getMessage:<H3><%= exception.getMessage() %></H3>
error page getCause:<H3><%= exception.getCause() %></H3>
error page getStackTrace:<H3><%= exception.getStackTrace() %></H3>
error page getLocalizedMessage:<H3><%= exception.getLocalizedMessage() %></H3>
error page getSuppressed:<H3><%= exception.getSuppressed() %></H3>
error page getClass:<H3><%= exception.getClass() %></H3>
</body>
</html>
运行结果如下
可以通过设置 web.xml属性,保证出错或者找不到页面时跳转到如下页面:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation=
"http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/WEB-INF/error.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.ArithmeticException</exception-type>
<location>/WEB-INF/error.jsp</location>
</error-page>
</web-app>
提示:还可以在error.jsp页面中加入相关信息,让其打印出错误信息来,操作如下:
错误码: <%=request.getAttribute("javax.servlet.error.status_code")%> <br>
信息: <%=request.getAttribute("javax.servlet.error.message")%> <br>
异常: <%=request.getAttribute("javax.servlet.error.exception_type")%> <br>
结果如下
注意点:以下内容,请务必注意务必牢记:
tomcat的web.xml文件和项目的web.xml都可设置以上代码,注意区别点:以一个名为test的Java项目为例:
http://localhost:8080/test/asdf –> 找不到asdf页面,会跳到test项目的web.xml文件设置的errorpage;
http://localhost:8080/asdf –> 找不到asdf页面,会跳到tomcat的web.xml文件设置的errorpage