1. 程式人生 > >在JSP,web.xml中指定錯誤頁面

在JSP,web.xml中指定錯誤頁面

友好的錯誤提示頁面,我們可以自定義錯誤頁面:
webxml中的配置
步驟如下:
一、開啟WEB-INF資料夾下web.xml檔案;
二、在裡面新增:
<!-- 404 頁面不存在錯誤 -->
<error-page>
<error-code>404</error-code>
<location>/errorpage404.htm</location>
</error-page>
<!-- 500 伺服器內部錯誤 -->
<error-page>
<error-code>500</error-code>
<location>/errorpage500.htm</location>
</error-page>
<!-- java.lang.Exception異常錯誤,依據這個標記可定義多個類似錯誤提示 -->
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/exception.htm</location>
</error-page>

三、儲存web.xml檔案,重啟應用伺服器。

★ 在web.xml中,可以使用exception-type標籤或HTTP狀態碼error-code標籤宣告錯誤頁面。

根據異常類宣告錯誤頁面:

<error-page>
<exception-type>java.io.IOException</exception-type>
<location>/error.jsp</location>
</error-page>

exception-type指定的必須是一個Throwable,並且這個類在容器的類路徑下能夠被找到。

根據HTTP狀態碼宣告錯誤頁面:

<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>

使用error-page標籤的要點:

① 不論是根據exception-type還是error-code來宣告錯誤頁面,location指定的路徑必須以斜線開頭,也就是說它是相對於Web應用根的。

② 一個web.xml中可以使用多個error-page標籤,一個error-page標籤中只能使用一個exception-type或error-page。



★ 在JSP中,可以在page指令中通過errorPage屬性來指定錯誤頁面:

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



★ 容器會為錯誤頁面提供一個exception物件,不過要想在錯誤頁面裡訪問這個物件,必須在錯誤頁面裡指定isErrorPage屬性:

error.jsp
<%@ page isErrorPage="true" %>

然後,在scriptlet中就可以使用隱式物件exception,在EL中可以使用EL隱式物件${pageContext.exception}。



★ 其它要點:

如果是JSP中丟擲的異常,容器首先檢視JSP中有沒有指定errorPage屬性,如果沒有,再檢視web.xml中有沒有error-page標籤;如果是Web應用中的其它地方丟擲異常,容器只會檢視web.xml中的error-page標籤。

可以通過HttpServletResponse.sendError()方法來發送錯誤的HTTP狀態碼:

response.sendError(HttpServletResponse.SC_FORBIDDEN);