我注意到,在Jetty(Servlet容器)上,默認情況下,如果出現錯誤,整個Stack回溯被髮送到瀏覽器,這對於實時環境。自定義錯誤頁面在Jetty中不起作用
所以我創建了一個「servlet-error.html」文件,並將其包含在我的web應用程序中,並從web.xml引用它。
我的web.xml看起來像:
<web-app>
..
<error-page>
<error-code>500</error-code>
<location>/servlet-error.html</location>
</error-page>
<error-page>
<error-code>503</error-code>
<location>/servlet-error.html</location>
</error-page>
</web-app>
WAR文件看起來像:
servlet-error.html
WEB-INF/web.xml
...
當我沒有<error-page>
部分然後我得到的標準誤差碼頭(有回溯),當我擁有它時,我只會在Firefox中看到一個白頁,並在Chrome中顯示標準的瀏覽器錯誤消息。 Jetty日誌中沒有錯誤,例如「servlet-error.html找不到」。
我已經嘗試更改從/servlet-error.html
到/servlet-error-xxx.html
的web.xml並沒有任何更改(=白頁,Jetty日誌中沒有錯誤)。所以我懷疑它無法通過HTML文件找到。
附加信息:應用程序使用Wicket編寫,應用程序位於Wicket「部署模式」中,導致錯誤的異常正在應用程序的構造函數中拋出(這似乎繞過了Wicket的錯誤處理和隱藏部署模式中的異常回溯?)。檢票申請包括在<servlet>
而不是<filter>
。
P.S.這個Jetty位於Apache後面,所以這甚至是正確的方式來處理這個,或者我應該添加一些東西到Apache配置中,即「如果Jetty返回!= 200,那麼忽略Jetty返回的內容並顯示此錯誤頁面...... 「
編輯:我已經糾正了原來的原因錯誤(即應用程序現在工作沒有錯誤),現在我可以瀏覽到http://mydomain.com/context-root/servlet-error.html,而在此之前,如果我瀏覽到靜態HTML我會得到500錯誤頁。我看到,我在我的web.xml:
<servlet-mapping>
<servlet-name>my-app</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
我懷疑,當碼頭嘗試執行正常請求,看到了錯誤,那麼它試圖獲取servlet-error.html
頁面,它也可以通過使用取web.xml
再次陷入試圖去應用程序,這又會產生錯誤..大概是爲了阻止無限循環,它只是顯示一個空白頁面的瀏覽器,雖然在日誌中的東西會很好!
但我還是不知道正確的方式來解決這個問題是....
添加以下,但它並沒有幫助。
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
嗨,是的,這是關於由Wicket應用程序構造函數,由Jetty處理的錯誤。我不知道如何讓Jetty在瀏覽器中顯示自定義錯誤頁面(例如靜態HTML),而不是在瀏覽器中顯示堆棧回溯(可能包含太多的信息,例如SQL語句或其他內容)。 – 2011-03-24 13:27:01
更改我的答案包含更多信息。 – Daan 2011-03-24 15:28:47
感謝您的信息。我已經試過(見問題),你知道它爲什麼不起作用嗎? – 2011-03-25 17:50:57