JSP 500頁面的異常資訊列印__JSP

來源:互聯網
上載者:User

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>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.