2011-09-19 20 views
10

404 hatalarını web.xml sayfamda aşağıdakini kullanarak bir sunucuya yönlendiriyorum.web.xml 404 sunucuya yönlendiriliyor, orijinal URI nasıl edinilir?

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

ben isteği gitmeye çalışıyordu nereye giriş yapmak istiyorum ama yönlendirme başlığı onu alamıyorum: request.getHeader gösterir ("Yönlendireni")

'boş' Eski rastgele bir var olmayan sayfaya isabet edersem.

Ve request.getRequestURL()/request.getRequestURI() her ikisi de yalnızca son açılış sunucu bilgisini gösterir (I.e.,/notFound).

İstenen 'kötü' sayfa URL'sini almanın herhangi bir yolu var mı?

cevap

18

Evet, RequestDispatcher#FORWARD_REQUEST_URI tarafından anahtarlanan javax.servlet.forward.request_uri adıyla bir istek özelliği olarak kullanılabilir. Hata sayfası konumu, basit bir RequestDispatcher#forward() çağrısı ile çağrılır. EL

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

veya:

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

O içinde (javax.servlet.RequestDispatcher sağlar) servlet-api.jar görünüyor servlet'dir şöyle

Yani, bunu elde edebilirsiniz Tomcat 7.0.19 yüklememde bu statik alanlardan hiçbiri yok; sadece 'ileri' ve 'içerme' yöntemleri. Ancak dizeyi doğrudan koyduğumda çalışabilirim. E.g., aşağıdaki işler. request.getAttribute ("javax.servlet.forward.request_uri") Yardımlarınız için teşekkürler! –

+1

Kesinlikle orada mevcut (javadocs'ları görmek için cevabımdaki bağlantıları tıklayın). Bu sorun, IDE'nizi projenizi bir Servlet 2.4 projesi veya daha eski bir sistem olarak işlemek için tasarladığınızı ya da başka bir yere yerleştirilmiş olan eski ve eski bir sürüm olan 'servlet-api.jar' dosyasında compiletime sınıf yolunuza bağlı kaldığınızı gösterir. Eclipse kullanıyor musunuz? Eğer öyleyse, lütfen bunu okuyun: http://stackoverflow.com/questions/4076601/how-do-i-import-the-javax-servlet-api-in-my-eclipse-project/4076706#4076706 – BalusC

+0

Garip. Ben servlet-api.jar açıldı ve RequestDispatcher.class bayt koduna bir göz attım ve orada FORWARD_REQUEST_URI görüyorum (yanı sıra diğer sabitler). Ancak Eclipse'deki beyanı açmak sadece iki yöntemi göstermektedir. Her ikisi de diskte aynı kavanoza işaret ediyorlar ... –

İlgili konular