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

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值