2011-09-19 59 views
10

我通過web.xml中的以下內容將404錯誤重定向到servlet。web.xml 404重定向到servlet,如何獲取原始URI?

<error-page> 
    <error-code>404</error-code> 
    <location>/notFound.do</location> 
</error-page> 

我想記錄在請求試圖去,但我沒有從指引頭得到它:request.getHeader(「引薦」)

這顯示「空」如果我只是打任何舊的隨機不存在的頁面。

而request.getRequestURL()/ request.getRequestURI()都只顯示最終的登陸servlet信息(即,/ notFound)。

任何獲取請求的「不良」網頁網址的方法?

回答

18

是的,它可以作爲名稱爲javax.servlet.forward.request_uri的請求屬性提供,其名稱爲RequestDispatcher#FORWARD_REQUEST_URI。錯誤頁面位置是由簡單的RequestDispatcher#forward()調用調用的。

所以,你可以把它作爲servlet的如下:

String originalUri = request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI); 

或EL:

<p>Original URI: ${requestScope['javax.servlet.forward.request_uri']}</p> 
+0

看來servlet的api.jar文件中(它提供javax.servlet.RequestDispatcher)我的Tomcat 7.0.19安裝沒有任何這些靜態字段;只有'前進'和'包含'的方法。 但我可以得到它的工作,如果我只是直接把字符串。例如,下面的工作。 (「javax.servlet.forward.request_uri」) 感謝您的幫助! –

+1

它肯定存在於那裏(點擊我答案中的鏈接查看javadocs)。這個問題表明你已經將IDE配置爲將項目視爲一個Servlet 2.4項目或更早版本,或者你將編譯時類路徑依賴於放置在別處的寬鬆且舊版本的'servlet-api.jar'文件。你在使用Eclipse嗎?如果是這樣,請閱讀此:http://stackoverflow.com/questions/4076601/how-do-i-import-the-javax-servlet-api-in-my-eclipse-project/4076706#4076706 – BalusC

+0

奇怪。我彈出打開servlet-api.jar並查看RequestDispatcher.class字節碼,並在那裏看到FORWARD_REQUEST_URI(以及其他常量)。但是在Eclipse中打開聲明只會顯示兩種方法。它們都指向磁盤上的相同jar ... –

相關問題