文档章节

JSP 500页面的异常信息打印

J
 Java编程思想
发布于 2014/08/20 15:30
字数 782
阅读 772
收藏 7

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: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就可以了),这个问题比较奇怪.

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

 

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

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>

本文转载自:http://blog.csdn.net/zdwzzu2006/article/details/6009079

J
粉丝 27
博文 164
码字总数 9502
作品 0
广州
程序员
私信 提问
问一个关于servlet的问题

我写了一个servlet,在post方法里面使用try-catch包裹代码,由于本人疏忽加上maven智能,在文件上传时我只添加了common-fileupload依赖,maven自己下载了io包,本地跑当然没问题,我就直接打包...

Lucare
2016/05/02
453
13
tomcat控制台无错误信息,异常信息全部输出到jsp页面,怎么回事?

用的status2.3.1.2 + spring3.1.1 全部错误信息都只在 jsp页面输出: 以前用的struts2.0 错误信息会在控制台打印,怎么用struts2.3 只在jsp页面输出错误信息,要覆盖struts的那个默认设置? ...

小猫王
2014/11/18
1K
0
web 基础巩固——JSP基础

本文按照官网文档总结,但是有可能会理解错误,学习时尽量和其他网站进行对比,同时也欢迎指出错误,好让我及时改正 什么是JSP页面? JSP页面是一个文本文档,包含两种类型的文本:静态数据,...

SXJR
2018/11/26
0
0
七、JSP九大内置对象和四个作用域

九大内置对象: request:类型是HttpServletRequest,和Servlet里的HttpServletRequest一模一样。 response:类型是HttpServletResponse,和Servlet里的HttpServletResponse一模一样。JSP里基...

Wakeeee_
2018/07/16
0
0
JSP 学习总结---学习笔记

什么是JSP 1)为什么说,Servlet是一个动态Web开发技术呢? Servlet是基于服务端的一种动态交互技术, HttpServletRequest表示客户端到服务端的对象 HttpServletResponse表示服务端到客户端的...

知止内明
2018/04/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

抽离css以及公共js

分离css 分离css:为何要把 CSS 文件分离出来,而不是直接一起打包在 JS 中。最主要的原因是我们希望更好地利用缓存。 extract-text-webpack-plugin > 1. 假设我们原本页面的静态资源都打包成...

莫西摩西
47分钟前
1
0
面向对象的7大原则

https://blog.csdn.net/u010355144/article/details/44940171

南桥北木
今天
2
0
Jenkins的配置从节点中默认没有Launch agent via Java Web Start,该如何配置使用

Jenkins的配置从节点中默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的。 如何设置才能让出来呢? 1:打开"系统管理"——"Configure Global Sec...

shzwork
今天
2
0
BAT面试必问HashMap源码分析

HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈...

别打我会飞
今天
12
0
RISC-V双周简报0x1f:一晚上写个RISC-V处理器玩玩(2018-09-01)

https://cnrv.io/bi-week-rpts/2018-09-01 https://blog.csdn.net/zoomdy/article/details/82914730...

whoisliang
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部