[英]web.xml error page does not work in case of FileNotFoundException
我在海關錯誤頁面及其異常類型方面遇到一些問題。 我的web.xml
這個錯誤頁面;
<error-page>
<exception-type>java.io.FileNotFoundException</exception-type>
<location>/faces/error.xhtml</location>
</error-page>
當我單擊鏈接並且JSF文件不存在時,會發生此錯誤。 我的問題是發生此錯誤時,網頁無法重定向到我的error.xhtml
頁面。
這是怎么引起的,我該如何解決?
僅當您實際請求的URL與FacesServlet
的URL模式匹配時, FileNotFoundException
此錯誤頁面才有效。 因此,假設FacesServlet
映射到*.jsf
,然后打開/somenotexistent.jsf
,以防Mojarra確實拋出FileNotFoundException
的子類,該子類的確與您的錯誤頁面匹配。
但是,如果您請求的URL與FacesServlet
的URL模式不匹配,則該請求將由另一個Servlet處理,通常是容器自己的DefaultServlet
。 如果資源不存在,則通常將返回404而不是引發異常。
您還想添加另一個錯誤頁面來解決此問題:
<error-page>
<error-code>404</error-code>
<location>/faces/error.xhtml</location>
</error-page>
<error-page>
<exception-type>java.io.FileNotFoundException</exception-type>
<location>/faces/error.xhtml</location>
</error-page>
但是,為防止重復,您還可以考慮使用servlet過濾器 ,該過濾器捕獲來自FacesServlet
的FileNotFoundException
任何實例,然后正確返回404。JSF實用程序庫OmniFaces已經有了這樣的過濾器FacesExceptionFilter
。 這樣,您最終只能得到錯誤代碼404上的錯誤頁面。
不,正如您所寫,當您的servlet / JSP / JSF /無論拋出什么FileNotFoundException
時,都會顯示錯誤頁面。 在404的情況下,您的servlet甚至沒有被調用,因此它不會拋出任何東西。
用這個
<error-page>
<error-code>404</error-code>
<location>/the404_page.html</location>
</error-page>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.