1. 程式人生 > >jsp的錯誤處理

jsp的錯誤處理

1.jsp頁面的錯誤處理

       jsp頁面中主要有兩種錯誤:編譯時錯誤和執行時的錯誤。 編譯時錯誤是jsp引擎在編譯jsp原始碼時出現的,編寫jsp時的語法有錯誤,導致jsp容器無法將jsp網頁編譯成正確的檔案。例如,500 Internal ServerError,“500”指HTTP的錯誤狀態碼。產生這種編譯錯誤時,通常是jsp存在語法錯誤,或是jsp引擎在安裝,設定時有不適當的情形發生。對於編譯時錯誤並沒有一個系統的方法可遵循。解決的方法通常是檢查程式是否有寫錯的或檢查伺服器的配置是否有問題。 執行時錯誤是在執行已編譯好的jsp頁面來處理客戶端的請求時出現的。客戶端請求處理時錯誤的發生,往往不是語法的錯誤,而可能是邏輯上的錯誤。例如,一個計算除法的程式,當會員輸入分母為0時,程式會發生錯誤並丟擲了異常(Exception),這時應當交給異常處理機制(Exception Handling)做適當的處理,一般採用要、下列兩種處理方法。
(1)在頁面中使用try-catch結構處理異常 在jsp頁面使用try-catch來捕抓jsp中可能出現的異常,類似於在普通的Java程式碼中,將可能出現異常的指令碼程式碼放入到try塊中,但由於jsp頁面除了包含HTML標籤,還包含各種指令碼元素,在jsp中使用try-catch結構會使得整個頁面的可讀性變差,這種方法並不是理想的解決方案,常用在不太複雜的頁面或需要特殊處理異常的頁面。 (2)採用jsp提供的更加簡潔有效的異常處理機制 使用jsp的錯誤頁面轉發機制,可以使用一個特定的jsp頁面來處理或顯示錯誤。相對於前面的try-catch結構處理異常方法,這樣能提供一個更為全域性錯誤處理機制,還能為多個jsp頁面提供同一個錯誤處理頁面。具體來說分為以下兩步:
首先,編寫一個專用的jsp錯誤處理頁面,該頁面將僅在其他頁面出現執行時異常情況下才被呼叫,如ExceptionHandling.jsp: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page isErrorPage="true" %>
<html>
  <head>
    
    <title>My JSP 'ExceptionHandling.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->


  </head>
  
  <body>
<font color="#ff0000" size="4">
An Exception ocurred,The Exception is:
<%=exception.getMessage() %>
</font>
  </body>
</html>
在page指令中指定本頁面是異常處理頁面。這樣,jsp引擎在進行處理時在jsp頁面內增加了一個jsp頁面中沒有的隱含物件exception。exception物件將包含異常的相關資訊。可以將其進行處理,如寫入日誌,或僅僅返回客戶端一個異常資訊。 然後在可能發生錯誤的jsp頁面中,指定當異常發生時由哪個專門的異常處理jsp進行處理,如DivException.jsp: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page errorPage="ExceptionHandling.jsp" %>
<html>
  <head>
    
    <title>My JSP 'DivException.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  
  <body>
    <%
    int i = 5/0;
     %>
  </body>
</html>

其中,在page指令中表明本頁面一旦出現任何執行時異常,jsp引擎會產生一個exception物件,並傳遞給異常處理頁面ExceptionHandling.jsp。本頁面執行到指令碼int i = 5/0時會產生異常,頁面處理終止。異常物件將被傳到ExceptionHandling.jsp,由頁面返回對客戶端的響應,如下圖: