本文主要描述JSP代碼中的異常,關於Java代碼中的異常,可以參考另一篇文章:http://blog.csdn.net/JavaEETeacher/archive/2007/03/19/1533754.aspx
要對JSP程式可能產生的異常進行處理,可以從多個角度完成:可以針對特定的代碼,可以針對特定的檔案,也可以針對錯誤的類型。如果針對特定的代碼,可以使用標準標籤庫中的核心標籤庫中的<c:catch>標籤。如果針對特定的檔案,可以使用JSP的page指令中的isErrorPage屬性和errorPage屬性完成。如果針對特定類型的錯誤,可以使用web.xml設定檔。
1 使用<c:catch>進行異常處理<c:catch>標籤可以針對特定的一行或者多行代碼。<c:catch>標籤的基本格式如下:<c:catch [var="儲存異常資訊的變數"]> 其他的JSP代碼,包括各種標籤</c:catch>用法與Java代碼中的try語句非常類似,把可能產生異常的代碼放在<c:catch>開始標誌和結束標誌之間。這樣,當這些代碼產生異常的時候,JSP容器會對異常進行處理。下面是一個對介面異常進行處理的例子:<c:catch> <c:out value="${user.address}"/></c:catch>如果希望產生異常之後,把異常資訊儲存起來供其它的代碼使用,可以使用var屬性指定一個變數。下面的代碼會在異常產生的時候把異常資訊儲存在exceptionInfo變數中:<c:catch var="exceptionInfo"> <c:out value="${user.address}"/></c:catch>如果需要可以在後面輸出異常的資訊:<c:if test="${exceptionInfo != null}"> 運行時候產生異常,異常資訊為:${exceptionInfo.message}</c:if>
2 為頁面指定異常處理檔案如果不想針對每一段代碼都進行異常處理,可以以頁面作為單位進行異常處理,可以指定當前頁面運行過程中產生錯誤的時候,由特定的頁面對異常進行處理。採用這種異常處理方式,需要編寫一個專門的異常處理檔案,然後在每個需要進行異常處理的檔案中進行設定。
編寫異常處理檔案異常處理檔案中需要使用page指令的isErrorPage屬性,格式如下:<%@ page isErrorPage="true"%>如果在頁面上進行了這樣的設定,頁面就具有了一項特殊的功能,能夠訪問異常對象exception。exception是JSP的內部對象,當頁面在運行過程中產生異常的時候,會拋出異常對象exception,該對象包含了異常資訊。下面是一個異常處理檔案:檔案名稱:errorPage.jsp<%@ page contentType="text/html;charset=gb2312"%><%@ page isErrorPage="true"%>頁面產生異常,異常資訊如下:${exception.message}
為頁面指定異常處理檔案要想讓頁面產生異常的時候,由專門的異常處理檔案對異常進行處理,需要在該頁面中使用page指令的errorPage指定專門的異常處理介面,格式如下:<%@ page errorPage="異常處理檔案"%>假設要設定前面編寫的errorPage.jsp頁面為當前頁面的異常處理檔案,可以使用下面的代碼:<%@ page errorPage="errorPage.jsp"%>
3 通過web.xml進行配置如果不想為每個版面設定異常處理檔案,可以為同一種類型的異常指定統一的異常處理檔案。還有一些異常的處理是沒有辦法通過版面設定來完成的,例如使用者輸入了網站中的一個不存在檔案,這時候應該告訴使用者檔案不存在,但是這種異常是沒有辦法通過在版面設定來解決的。要想為每種類型的異常指定一個異常處理檔案,可以通過web.xml進行配置。在web.xml中進行配置可以根據錯誤類型配置,例如NullPointException、IOException等,也可以根據錯誤編碼配置。常見的異常編碼如下:403錯誤:檔案被禁止訪問;404錯誤:檔案沒有找到;500錯誤:檔案在運行過程中發生未知錯誤。根據異常類型進行配置,可以使用下面的代碼: <error-page> < exception-type >java.lang.NullPointerException</exception-type> <location>/nullpointer.jsp</location> </error-page>根據異常編碼進行配置,可以使用下面的代碼: <error-page> <error-code>401</error-code> <location>/401.jsp</location> </error-page>
參考教材:《Java Web程式設計基礎教程》