JSP异常处理

web开发中异常信息是很重的信息,对开发人员是其相当重要的,对这些异常信息进行转换为用户能理解的信息就更重要了。在单纯的JSP开发中,处理异常信息一般使用web.xml来定义。

web开发中异常信息是很重的信息,对开发人员是其相当重要的,对这些异常信息进行转换为用户能理解的信息就更重要了。在单纯的JSP开发中,处理异常信息一般使用web.xml来定义。

<error-page>
    <error-code>400</error-code>
    <location>/400.html</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>/404.html</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
</error-page>

这是很简单的!

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

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

最常说的:

<%@page contentType="text/html;charset=Big5" isErrorPage="true"%>
<html>
    <head>
        <title>出现错误</title>
    </head>
<body>
    <H1>错误:</H1><%=exception%>
    <H2>错误内容:</H2>
    <%
    exception.printStackTrace(response.getWriter());
    %>
</body>
</html>

因为这个页面调用了exception内置对象,所以isErrorPage必须为true。 这个是能打印出异常信息的,但是放入了response中,页面从头就开始打印异常信息,用户不明白异常信息影响用户使用。 

另一种常见方法:

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

<%@page contentType="text/html;charset=Big5" isErrorPage="true"%>
<html>
    <head>
        <title>错误信息</title>
    </head>
<body>
    错误码: <%=request.getAttribute("javax.servlet.error.status_code")%> <br>
    信息: <%=request.getAttribute("javax.servlet.error.message")%> <br>
    异常: <%=request.getAttribute("javax.servlet.error.exception_type")%> <br>
</body>
</html>

同理的还有

<%= exception.getMessage()%>
<%=exception%>
<c:out value="${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就可以了),这个问题比较奇怪.

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

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

<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> 
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page isErrorPage="true"%> //一定要写,不能显示错误
<%
 response.setStatus(HttpServletResponse.SC_OK); //这句也一定要写,不然IE不会跳转到该页面
 String path=request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
    500 error
    <div>系统执行发生错误,信息描述如下:</div>
     <div>错误状态代码是:${pageContext.errorData.statusCode}</div>
     <div>错误发生页面是:${pageContext.errorData.requestURI}</div>
    <div>错误信息:${pageContext.exception}</div>
    <div>
        错误堆栈信息:<br/>
        <c:forEach var="trace" items="${pageContext.exception.stackTrace}">
        <p>${trace}</p>
        </c:forEach>
    </div>
</body>
</html>
锲而舍之,朽木不折;锲而不舍,金石可镂。——《荀子·劝学》
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号