web開發中異常資訊是很重的資訊,對開發人員是其相當重要的,對這些異常資訊進行轉換為使用者能理解的資訊就更重要了~
在單純的JSP開發中,處理異常資訊一般使用web.xml來定義。
02 |
<error-code>400</error-code> |
03 |
<location>/400.html</location> |
07 |
<error-code>404</error-code> |
08 |
<location>/404.html</location> |
12 |
<error-code>500</error-code> |
13 |
<location>/error.jsp</location> |
這是很簡單的。
如果現在想在頁面中設定一個隱藏div來供開發人員查看異常資訊呢。
整理下網站說的一些方法:
最常說的:
01 |
<%@page contentType="text/html;charset=Big5" isErrorPage="true"%> |
03 |
<head><title>出現錯誤</title></head> |
05 |
<H1>錯誤:</H1><%=exception%> |
08 |
exception.printStackTrace(response.getWriter()); |
因為這個頁面調用了exception內建對象,所以isErrorPage必須為true。
這個是能列印出異常資訊的,但是放入了response中,頁面從頭就開始列印異常資訊,使用者不明白異常資訊~影響使用者使用。
另一種常見方法:
不僅可以使用jsp內建exception對象來取得異常,也可以取得request中的attribute
1 |
<%@page contentType="text/html;charset=Big5" isErrorPage="true"%> |
3 |
<head><title>錯誤資訊</title></head> |
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> |
同理的還有
<%= 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"%> //一定要寫,不能顯示錯誤 |
06 |
response.setStatus(HttpServletResponse.SC_OK); //這句也一定要寫,不然IE不會跳轉到該頁面 |
07 |
String path=request.getContextPath(); |
09 |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
12 |
<meta http-equiv="Content-Type" content="text/html; charset=GB18030"> |
13 |
<title>Insert title here</title> |
17 |
<div>系統執行發生錯誤,資訊描述如下:</div> |