|
exception 隱含物件在轉換為Servlet之後,會對應至java.lang.Throwable型態的物件,也就是例外處理相關物件,只要您對Java例外處理有認識,就應當知道如何使用exception的各種方法,這邊則由exception為標題,實際上在介紹如何於web.xml中規劃錯誤處理網頁,以及在發生對應的例外發生時呼叫對應的例外處理網頁。 伺服器發現錯誤時,會有自己的一套錯誤訊息網頁以供回應,例如在發生404 Not Found之類的錯誤時,IIS、Apache、Tomcat等都會有各自不同的網頁來回應客戶端,而為了要在不同的伺服器有一致的錯誤處理頁面外觀,您 也可以自行規劃錯誤訊息處理網頁,將伺服器的那一套替換掉,使用自行的規畫,實際在web.xml中加入以下的標籤作示範:
... 上面的設定會在伺服器發生相對應的錯誤時,呼叫對應的網頁(可以是靜態或動態的網頁),例如發生404 Not Found時,就會傳回404.html給客戶端,不過有些瀏覽器會有自己的錯誤訊息網頁,例如Internet Explorer在接收到404 Not Found時,會使用自己的錯誤訊息來顯示給操作者看。 之前曾示範過如何在page指令元素中設定例外處理網頁,並利用exception物件來顯示相關訊息,這邊介紹另一種方式,首先您要知道任何被 Servlet丟出來的例外物件如果沒有被Servlet處理,則伺服器會負責處理它,處理的方式視不同的伺服器而定,如果您想要在發生例外時,能有一致 的處理方式,即使是Servlet被部署在不同的伺服器上,最好是自行處理例外,處理例外的方式可以使用try-catch-finally 或是之前介紹的例外處理網頁設定,這是在Servlet內處理例外的方式,如果要將例外丟給伺服器處理,而又要自訂處理回應頁面,則也可以在 web.xml中設定,例如在web.xml中加入以下的內容:
... <exception-type>中必須設定例外類別的完整套件名稱,而<location>所指的對象可以是靜態網頁,或是動 態網頁,如果要利用exception接收例外訊息,則必須設定page指令元素的isErrorPage屬性為true,例如:
<%@page contentType="text/html;charset=Big5" 通常處理例外的網頁是動態網頁,您可以設計一個通用的動態網頁,讓相關錯誤訊息、例外處理都由它來處理,以產生一致的外觀,例如在web.xml中這麼寫:
... 您可以使用下面的網頁來取得相關訊息,並進一步修改為通用的錯誤處理網頁:
<%@page contentType="text/html;charset=Big5" request的getAttribute()可以取得儲存在其中的相關屬性,依status_code、message、與 exception_type,您可以進一步進行不同的錯誤、例外處理。 |