欢迎光临
我们一直在努力

[JSP/Servlet入門]JSP錯誤處理-JSP教程,Jsp/Servlet

建站超值云服务器,限时71元/月

剛開始撰寫jsp時,總是會被jsp的除錯訊息所困擾,如果沒有稍微瞭解jsp與servlet之間運作關係的初學者,所看到的只是一堆除錯訊息,甚至例外發生的訊息,這些訊息雖然包括詳細的錯誤訊息,但對於初學者而言卻是不友善、不易閱讀理解的。基本上,只要瞭解jsp與servlet之間的運作關係,並瞭解java編譯訊息與例外處理,要瞭解在撰寫jsp網頁時,因錯誤而產生的錯誤報告頁面就不是件難事。

我們知道jsp終究會轉換為servlet,而運行時真正動作的是servlet類,所以錯誤可能發生在兩個時候:一個是jsp轉換為servlet原始碼時,因為jsp語法錯誤而導致無法生成servlet原始碼,或是已轉換為servlet程式碼,但編譯時編譯器檢查出錯誤,這稱之為translation time processing errors;第二個錯誤發生的時期在於客戶請求執行servlet時,因為程式邏輯或運行時未考慮到的錯誤而產生例外,這稱之為client request time processing errors。

如何在jsp運行時判別錯誤發生的種類?如果錯誤報告頁面出現"….encountered an internal error….",就有可能是轉換時期錯誤,或是"generated servlet error: [javac] compiling 1 source file….",就有可能是編譯器在編譯servlet程式碼時發現錯誤,這個時候您必須檢查一下jsp語法是否有錯誤,或是程式邏輯有明顯可讓編譯器檢查出的錯誤。

什麼是程式邏輯有明顯讓編譯器檢查出的錯誤?一個初學者較常犯但不容易檢查出的錯誤可能是「多餘的斷行」,例如:

<%@page contenttype="charset=big5" errorpage="errorhandler.jsp"%><% throw new exception("這是一個假裝的錯誤,純綷丟出例外^_^");%>

這個jsp程式乍看之下沒有錯誤,我們只是丟出一個例外而已,但注意到它最底下空了一行,在轉換為servlet之後,這一行會實際轉換為out.write(\r);,而在這行之前,我們直接丟出了一個例外,換句話說,out.write(\r);這行永遠不會被執行到,這個邏輯錯誤,編譯器是可以檢查的出的,因而錯誤頁面會回報"unreachable statement",改正這個錯誤的方式,是將jsp頁面中多餘的斷行刪掉。

如果編譯過後的servlet在使用者請求之後,在運行過程中產生了錯誤而丟出例外,這個例外如果沒有被處理,則最後會由container處理,而container再將訊息交由server傳回給客戶端,基本上也是會出現"….encountered an internal error….",不過在回報頁面中還會出現例外的堆疊追蹤訊息,依此您可以判斷應該是client request time processing errors。

您也可以自訂例外發生時的處理方式,只要使用page指令元素時,設定屬性errorpage指定錯誤處理的jsp頁面,而錯誤處理的jsp頁面則設定iserrorpage屬性為true即可,例如我們的示範頁面errordemo.jsp是:

<%@page contenttype="charset=big5" errorpage="errorhandler.jsp"%><% throw new exception("這是一個假裝的錯誤,純綷丟出例外^_^");%>

這個頁面只是純綷丟出一個我們自訂的例外,注意我們設定例外的處理頁面是errorhandler.jsp,它的內容是:

<%@page contenttype="text/html;charset=big5" iserrorpage="true"%><%@page import="java.io.printwriter"%><html><head><title>錯誤處理頁面</title></head><body> <h1>網頁發生錯誤:</h1><%=exception%> <h2>顯示例外堆疊追蹤:</h2> <% exception.printstacktrace(new printwriter(out)); %></body></html>

exception物件是jsp的隱含物件,由errordemo.jsp丟出的例外物件訊息就包括在exception之中,我們先簡單的顯示tostring()之後的訊息,也就是<%=exception%>顯示的內容;另外我們也可以將例外堆疊追蹤顯示出來,printstacktrace()接受一個printwriter物件作為參數,所以我們將out隱含物件(它是jspwriter)裝飾為printwriter物件,如此使用exception的printstacktrace()方法來顯示例外堆疊追蹤。

這個例子的執行結果如下:

<html><head><title>錯誤處理頁面</title></head><body> <h1>網頁發生錯誤:</h1>java.lang.exception: 這是一個假裝的錯誤,純綷丟出例外^_^ <h2>顯示例外堆疊追蹤:</h2> java.lang.exception: 這是一個假裝的錯誤,純綷丟出例外^_^ at org.apache.jsp.errordemo_jsp._jspservice(errordemo_jsp.java:45) at ……… 略 at java.lang.thread.run(thread.java:534)</body></html>

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » [JSP/Servlet入門]JSP錯誤處理-JSP教程,Jsp/Servlet
分享到: 更多 (0)

相关推荐

  • 暂无文章