web.xml中设置统一的自定义错误页面

web开发中异常信息是很重的信息,对开发人员是其相当重要的,对这些异常信息进行转换为用户能理解的信息就更重要了~

在单纯的JSP开发中,处理异常信息一般使用web.xml来定义。

01

<error-page>

02

         <error-code>400</error-code>

 

03

         <location>/400.html</location>

04

     </error-page>

 

05

  

06

     <error-page>

 

07

         <error-code>404</error-code>

08

         <location>/404.html</location>

 

09

     </error-page>

10

  

 

11

     <error-page>

12

         <error-code>500</error-code>

 

13

         <location>/error.jsp</location>

14

     </error-page>

这是很简单的!

如果现在想在页面中设置一个隐藏div来供开发人员查看异常信息呢?

整理下网站说的一些方法:

最常说的:

01

<%@page contentType="text/html;charset=Big5" isErrorPage="true"%>

02

<html>

 

03

<head><title>出现错误</title></head>

04

<body>

 

05

     <H1>错误:</H1><%=exception%>

06

     <H2>错误内容:</H2>

 

07

     <%

08

         exception.printStackTrace(response.getWriter());

 

09

     %>

10

</body>

 

11

</html>

因为这个页面调用了exception内置对象,所以isErrorPage必须为true。

这个是能打印出异常信息的,但是放入了response中,页面从头就开始打印异常信息,用户不明白异常信息~影响用户使用。

另一种常见方法:

不仅可以使用jsp内置exception对象来取得异常,也可以取得request中的attribute

1

<%@page contentType="text/html;charset=Big5" isErrorPage="true"%>

2

<html>

 

3

<head><title>错误信息</title></head>

4

<body>

 

5

     错误码: <%=request.getAttribute("javax.servlet.error.status_code")%> <br>

6

     信息: <%=request.getAttribute("javax.servlet.error.message")%> <br>

 

7

     异常: <%=request.getAttribute("javax.servlet.error.exception_type")%> <br>

8

</body>

 

9

</html>

同理的还有

<%= exception.getMessage()%>

<%=exception%>

<c:outvalue="${requestScope['javax.servlet.error.message']}"/>

这个也可能打印异常信息,但有时只会打印出一个null.没有任何有价值信息。

-----------------------

还有一个特殊情况:

Error Page在IE下不能转发的问题

这是IE自身的设定导致的,经过百度,找到几个解决办法:     
1, IE设定   工具-->Internet选项-->高级--->显示http友好错误信息(取消选择) , 这样就可以了
2, 设置指定错误页页状态为正常,来告诉IE这不是一个服务器错误, 从而不显示IE的自定义错误页 
<%
    response.setStatus(200); // 200 = HttpServletResponse.SC_OK
%>
3, 把错误页做大一点,弄个几百K 就可以显示错误页面 (加一个div块,display设为none就可以了),这个问题比较奇怪.

这个问题我还没有遇到过~先记录在这儿吧~~

 

现在能符合要求的处理方法是:

01

<%@ page language="java" contentType="text/html; charset=GB18030"

02

pageEncoding="GB18030"%>

 

03

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

04

<%@ page isErrorPage="true"%> //一定要写,不能显示错误

 

05

<%

06

response.setStatus(HttpServletResponse.SC_OK); //这句也一定要写,不然IE不会跳转到该页面

 

07

String path=request.getContextPath();

08

%>

 

09

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

10

<html>

 

11

<head>

12

<meta http-equiv="Content-Type" content="text/html; charset=GB18030">

 

13

<title>Insert title here</title>

14

</head>

 

15

<body>

16

500 error

 

17

<div>系统执行发生错误,信息描述如下:</div>

18

<div>错误状态代码是:${pageContext.errorData.statusCode}</div>

 

19

<div>错误发生页面是:${pageContext.errorData.requestURI}</div>

20

<div>错误信息:${pageContext.exception}</div>

 

21

<div>

22

错误堆栈信息:<br/>

 

23

<c:forEach var="trace" items="${pageContext.exception.stackTrace}">

24

<p>${trace}</p>

 

25

</c:forEach>

26

</div>

 

27

</body>

28

</html>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值