2012-03-25 20 views
3

首先,讓我說我不是Java程序員,或者非常熟悉Tomcat,所以請耐心等待:)我正在與運行在Apache Tomcat 5.0.9上的SaaS應用程序。我無法訪問服務器配置文件,也無法添加.jsp文件。tomcat 5.0.9重寫404錯誤頁面聲明無需訪問服務器 - 需要自定義404消息

我在的情況是我有一個在Mozilla的犀牛環境中運行的腳本,我有機會獲得以下兩個對象:

org.apache.coyote.tomcat5.CoyoteRequestFacade org.apache。 coyote.tomcat5.CoyoteResponseFacade

我需要將狀態設置爲SC_NOT_FOUND(404)並提供自定義消息。問題是,不管我做什麼,如果狀態是404,我得到由供應商設置的「醜陋」404錯誤消息。我曾嘗試使用「sendError」,「setStatus」,我試圖讓調度員和重定向到另一個頁面,同時也設置狀態爲404,我試過一個包裝,但不知道我在做什麼,已經看到有關過濾器的信息,但不知道如何在這種情況下應用,或者即使這是正確的方法。

同樣,似乎只要設置了404,網絡服務器就會提供它自己的頁面。我假設這是一個「錯誤頁面聲明」,我不能重寫。我已經通讀這個問題How to get the message in a custom error page (Tomcat)?(以及其他許多人),但我不明白這足以將信息轉化爲我的特定情況。

那麼,是不是可以「覆蓋」錯誤頁聲明編程?或者,考慮到我所處環境的侷限性,如何返回404錯誤自定義錯誤頁面?在這一點上,我只會以純文本的方式解決問題 - 不一定是花哨的。我只需要一些方法來使用404狀態顯示「用戶友好」的消息。

任何幫助將不勝感激!

P.S.我應該提一下,這種方法的原因是相關頁面將被搜索引擎和人類消費(可能)。我需要404以便搜索引擎從其緩存中刪除頁面,並且我需要「漂亮」的消息告訴人類訪問者由於不再可用的頁面而需要採取的步驟。

回答

2

的Tomcat解釋你的404種狀態,並與您的錯誤消息或堆棧跟蹤顯示標準錯誤頁面。

如果使用response.sendError(404, "Your error message here")不適合你,那麼你需要看看使用自定義錯誤頁面 - http://wiki.apache.org/tomcat/FAQ/Miscellaneous#Q6,但這取決於你可以修改web.xml - 你說你無法做到的事情。

現在你可以返回一個OK的HTTP狀態碼(200),以及要顯示

漂亮的格式化差錯的內容,如果客戶消費的反應僅僅是一個連接一個人的瀏覽器,那麼他們將沒有智者。另一方面,如果客戶端使用它是某種機器(腳本,另一個程序等),並且他們正在根據響應代碼執行邏輯,那麼這不是一個好的解決方案,因爲通過返回一個200狀態碼,你說的一切正常(而不是錯誤代碼 - 4xx或5xx)

+0

謝謝你!我應該提到404會被機器和人們消費,這就是爲什麼我需要這兩者。我需要404這樣的機器從它的緩存中刪除頁面,但如果一個人讀取它,我需要一個「漂亮」的消息。我會更新我的問題。 – 2012-03-25 16:24:31

+0

如果你不能修改web.xml,我不認爲你有什麼辦法可以替換標準的tomcat錯誤頁面 – 2012-03-25 16:26:54