2011-09-19 6 views
10

Sto reindirizzando gli errori 404 a un servlet tramite il seguente nel mio web.xml.web.xml 404 reindirizzare a servlet, come ottenere l'URI originale?

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

mi piacerebbe registrare in cui la richiesta è stata cercando di andare, ma non sto ricevendo dalla testata referrer: request.getHeader ("referer")

Ciò dimostra 'null' se ho appena colpito una vecchia pagina casuale inesistente.

E request.getRequestURL()/request.getRequestURI() mostra semplicemente le informazioni finali del servlet di destinazione (I.e.,/nonFound).

Un modo per ottenere l'URL di pagina "cattivo" richiesto?

risposta

18

Sì, è disponibile come attributo di richiesta con il nome javax.servlet.forward.request_uri, che è codificato da RequestDispatcher#FORWARD_REQUEST_URI. La posizione della pagina di errore è invocata da una semplice chiamata RequestDispatcher#forward().

Quindi, si può ottenere come segue in servlet:

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

o in EL:

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

Sembra che il servlet-api.jar (che fornisce javax.servlet.RequestDispatcher) in la mia installazione di Tomcat 7.0.19 non ha nessuno di quei campi statici; solo i metodi "avanti" e "includi". Ma posso farlo funzionare solo se inserisco direttamente la stringa. Ad esempio, i seguenti lavori. request.getAttribute ("javax.servlet.forward.request_uri") Grazie per il vostro aiuto! –

+1

È sicuramente presente lì (fai clic sui collegamenti nella mia risposta per vedere i javadoc). Questo problema suggerisce che hai configurato il tuo IDE per trattare il tuo progetto come un progetto Servlet 2.4 o precedente, o che stai facendo affidamento sul tuo classpath compiletime su un file 'servlet-api.jar' con versione libera e vecchio che è collocato altrove. Stai usando Eclipse? In tal caso, leggi questo: http://stackoverflow.com/questions/4076601/how-do-i-import-the-javax-servlet-api-in-my-eclipse-project/4076706#4076706 – BalusC

+0

Strano. Ho aperto il servlet-api.jar e ho dato un'occhiata al codice byte RequestDispatcher.class, e vedo FORWARD_REQUEST_URI lì (così come le altre costanti). Ma l'apertura della dichiarazione in Eclipse mostra solo i due metodi. Sono entrambi puntati allo stesso jar sul disco ... –