2013-06-19 82 views
7

我想在我的Spring 3.1 Web應用程序中提供自定義404錯誤頁面,但是我無法取消激活Jetty 8的默認404錯誤頁面。取消激活Jetty的默認404錯誤處理程序

碼頭8,開箱即用,提供了一個默認的404錯誤頁面: 前往碼頭主辦的網站時,並且提供一個不受任何servlet處理的URL路徑(例如通過訪問http://www.example.com/nonexisting),碼頭回應與自己的默認HTML錯誤頁面

HTTP ERROR 404 

Problem accessing /nonexisting. Reason: 

    Not Found 
Powered by Jetty:// 

要替換此默認行爲,

,但我的網站仍然返回碼頭本身的默認HTML錯誤頁面

Jetty 8's official documentation talks about setting up a "custom error pages",但有建議說

  • 配置自定義碼頭錯誤處理程序(我不想這樣做,我想這樣做我自己的春天@Controller內如上所述)
  • 創建一個「捕獲所有上下文並創建映射到/ URI的」根「Web應用程序。」 (我不想這樣做,因爲我web.xml裏面我已經映射到Spring MVC的DispatcherServlet到/。

我如何關閉Jetty的默認錯誤處理程序,並有錯誤處理如上指出做些什麼呢?

回答

6

我的問題的解決方案是添加自定義org.eclipse.jetty.server.handler.ErrorHandler

如果用戶沒有明確指定某些ErrorHandler,則Jetty服務器實例似乎註冊了默認的ErrorHandler

http://www.eclipse.org/jetty/documentation/current/custom-error-pages.html所述,要註冊自定義ErrorHandler,您可以按照以下步驟操作。

  1. 執行一些org.eclipse.jetty.server.handler.ErrorHandler子類,例如, com.example.CustomErrorHandler
  2. 使這個子類可用於您的Eclipse服務器實例,例如通過將CustomErrorHandler捆綁在jar文件中,然後將該jar文件複製到${jetty.base}/lib/ext目錄中。
  3. 配置您的碼頭服務器實例有這個習俗ErrorHandler註冊爲一個bean:

文件jetty.xml

<?xml version="1.0"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" 
"http://www.eclipse.org/jetty/configure_9_0.dtd"> 
<Configure id="Server" class="org.eclipse.jetty.server.Server"> 

    <!-- more configuration --> 

    <Call name="addBean"> 
    <Arg> 
     <New class="com.example.CustomErrorHandler"> 
     <Set name="server"><Ref refid="Server" /></Set> 
     </New> 
    </Arg> 
    </Call> 
</Configure>