在JSP中聲明出錯頁面

【前言】爲了web安全改造做點前期準備,界面錯誤統一定向到一個error.jsp上,不能出現tomcat的版本號。

 

【原文】http://www.51cto.com/art/200704/46521.htm

 

由於JSP文件被編譯成Servlet執行,出現異常的默認操作就是顯示異常的堆棧。JSP頁面提供了重寫這個默認行爲的功能,並且將異常處理轉到另一個文件中:

 

<%@ page errorPage="error.jsp"%>

 

這樣在這個JSP頁面中,如果遇到任何未捕獲到的Throwable對象,那麼就會顯示指定的出錯頁面error.jsp上。

 

下面我們來看一個具體的例子。首先我們開發一個會出錯的頁面,如:會出錯的頁面(mustBeError.jsp)

 

 

 

從代碼可以看出,這個頁面必定會出錯誤。在這個頁面的page指令中,通過errorPage="error.jsp"指定出錯時的錯誤處理頁面。

 

我們來看錯誤處理頁面的具體代碼,如錯誤處理頁面(error.jsp)

 

 

在error.jsp中,首先在page指令中指定:

 

isErrorPage="true"

 

這是非常關鍵的地方,只有這樣指定,這個頁面才能進行錯誤處理,才能使用exception對象。

exception對象有幾個非常重要的方法,用於獲得出錯的信息,這些方法如下:

 

 <%=exception.getMessage()%>
 <%=exception.getLocalizedMessage()%>
 <% exception.printStackTrace(PrintWriter);%>

 

最後一個方法用於打印錯誤堆棧。如果需要在錯誤頁面以外使用這個exception對象,那麼可以這樣把exception對象保存起來:

session.setAttribute("myError",exception);

在另一個頁面使用:

Exception exception=( Exception )session.getAttribute("myError");

把這個異常對象引入進來。

 

 

在瀏覽器裏輸入:http://127.0.0.1:8080/mustBeError.jsp。由於這個頁面必定產生運行時異常,它將自動調用http://127.0.0.1:8080/error.jsp頁面。

 

以上是JSP頁面內部出現錯誤的處理情況。如果異常在JavaBean中產生,那麼將怎麼辦呢?具體的方法是在JavaBean中把異常拋出到JSP頁面,如果JSP頁面沒有捕獲這個異常,那麼也到錯誤頁面中處理。我們再來看一個例子,假設有一個JavaBean,用於計算兩個整數的和,代碼如:

 

 

可能在Integer.parseInt方法中出現異常。當出現這個異常時,就把這個異常拋出到JSP頁面。我們看在JSP頁面中怎麼使用這個類,並且怎麼處理異常,

 

 

從代碼可以看出,在這個頁面中沒有捕獲JavaBean中產生的異常,這樣就會自動調用錯誤處理頁面。

 

在瀏覽器裏輸入http://127.0.0.1:8080/add.jsp?x=12&y=112將會運行正常。在表單中填寫以下的值:

x=12,y=sdkjf

那麼必定產生運行異常,這個異常將在error.jsp中進行處理。

 

當輸入以上的值提交後,將在error.jsp中捕獲到NumberFormatException。

 

 

我們進一步把以上的實踐昇華一下,總結出一句話:JSP錯誤處理本質就是在不同的頁面或者類中傳遞異常,並且在目標頁面處理異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章