2011-05-24 87 views
6

我知道你可以在web.xml中指定錯誤頁面,如下一個通用的機制來處理HTTP狀態代碼

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

我覺得有點乏味,列出一個頁面的每一個錯誤代碼。我想知道在這種情況下最好的慣例是什麼!有沒有更好的方法來自動生成這些頁面,例如使用JSP或servlet,還是通過Spring或Stripes?

回答

0

Stripes提供了一些可擴展但簡單的方法來處理異常。有一個很好的寫作on the stripes website和關於它的Stripes book幾頁。

您將基本上實現ExceptionHandler接口,從DefaultExceptionHandler擴展(我們通常所做的),或者有更高級的情況下有DelegatingExceptionHandler。

+0

這隻包含HTTP 500錯誤。其他5nn和所有4nn錯誤不是由例外本身引起的。 – BalusC 2011-05-25 14:27:38

+0

我認爲這是相關的,因爲OP詢問了除404以外的錯誤代碼。事實上,這將覆蓋大部分404,因爲Stripes攔截器嘗試綁定大多數URL並在動作bean,jsp或靜態資源不是它時拋出它自己的404找到。 – lucas 2011-05-25 15:39:26

2

如果您正在討論生成頁面本身,您可以將錯誤代碼映射到jsp頁面,例如,

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

如果你在談論的映射本身,一個可能的解決方案(雖然我建議你使用標準的web.xml映射),以避免所有錯誤代碼的映射是使用一個servlet過濾器過濾所有資源,委派對FilterChain的訪問並檢查響應代碼集(如果它不是200)(或任何其他預定義的可接受響應(如401)),並重定向到errors.jsp頁面。

爲了捕獲響應代碼,您將使用保存響應代碼集的HttpServletResponseWrapper實現來包裝HttpServletResponse。

+0

要訪問響應的狀態碼,我會使用http://stackoverflow.com/questions/1302072/how-can-i-get-the-http-status-code-out-of-a-servletresponse-in- a-servletfilter(這是你的建議,但是有一個詳細的實現)。 – 2011-08-17 09:40:53

+0

@eneveu,沒錯 – Asaf 2011-08-20 08:56:48