2010-10-18 15 views
10

Ho un'applicazione Spring MVC pubblicata in Tomcat. Quando l'utente inserisce una pagina che non si trova, viene visualizzata la mia pagina di default 404, come stabilito in web.xmlCome rendere la pagina 404 personalizzata come forward, non come reindirizzamento in Tomcat

<error-page> 
    <error-code>404</error-code> 
    <location>/errors/404/</location> 
</error-page> 

Il problema è che se l'utente va a http://mydomain/bad/url

viene reindirizzato a http://mydomain/errors/404/

Questo è fastidioso, perché se un utente digita un URL errato è difficile vedere quale è stato l'errore e correggerlo.

Dopo un errore 404, mi piacerebbe conservare l'URL originale, ma visualizzare la pagina di errore. (cioè un avanti, non un reindirizzamento). Questa è la mia impressione su come funziona la maggior parte dei server web. È possibile?

+0

Se il vostro scopo è quello di ottenere l'URL originale che ha causato il 404, wont req.getAttribute ("javax.servlet.error.request_uri") lavorare per voi? – JoseK

+0

Un buon consiglio: non lo sapevo. Ma il mio obiettivo è la facilità d'uso. Voglio che l'URL rimanga al valore errato in modo che gli utenti possano vederlo, ma fornire la pagina di errore. –

+0

risponderesti a te stesso e chiuderai la domanda? Saluti. – mschonaker

risposta

4

io non capisco il motivo per cui questo funziona il modo in cui lo fa, ma ...

ho scoperto che se si imposta il codice di stato e hanno una risposta vuota (o se si tenta di trasmettere alla la pagina di errore), Tomcat reindirizzerà alla pagina di errore:

((HttpServletResponse) response).setStatus(HttpServletResponse.SC_NOT_FOUND); 

ma se chiedete Tomcat per inviare la pagina, sarà solo in avanti e lasciare l'URL nello stato originale, come sto cercando.

((HttpServletResponse) response).setStatus(HttpServletResponse.SC_NOT_FOUND); 
((HttpServletResponse) response).sendError(HttpServletResponse.SC_NOT_FOUND); 
+0

Dovresti semplicemente chiamare sendError(). Imposta lo stato. Usa setStatus() solo se hai intenzione di fornire anche il contenuto. –

Problemi correlati