jsp errorPage指令,错误页面的处理

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" %> 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
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" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>error pagetitle>
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>

运行结果如下
jsp errorPage指令,错误页面的处理_第1张图片

可以通过设置 web.xml属性,保证出错或者找不到页面时跳转到如下页面:


<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>404error-code>
      <location>/WEB-INF/error.jsplocation>
  error-page>

  <error-page>
      <error-code>500error-code>
      <location>/WEB-INF/error.jsplocation>
  error-page>

  <error-page>
      <exception-type>java.lang.ArithmeticExceptionexception-type>
      <location>/WEB-INF/error.jsplocation>
  error-page>

web-app>

提示:还可以在error.jsp页面中加入相关信息,让其打印出错误信息来,操作如下:

错误码: <%=request.getAttribute("javax.servlet.error.status_code")%> 
信息: <%=request.getAttribute("javax.servlet.error.message")%>
异常: <%=request.getAttribute("javax.servlet.error.exception_type")%>

结果如下
这里写图片描述
注意点:以下内容,请务必注意务必牢记:

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

你可能感兴趣的:(java)