2012-12-16 6 views
7

Say auf Fehler geführt habe ich eine Spring MVC-Anwendung mit dem folgenden web.xml Eintrag:eine URL, den Erste (404) von Fehler-Seite-Controller im Frühjahr MVC

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

und folgenden Fehler-Seite-Controller :

Jetzt Benutzer angefordert nicht vorhandene URL/Benutzer/show/iamnotauser, die Fehler Seite Controller ausgelöst. Wie bekomme ich diese nicht existente '/ user/show/iamnotauser'-URL von der errorPage() - Methode von RootController, um sie in das Modell einzufügen und auf der Fehlerseite anzuzeigen?

Antwort

14

Der Trick ist Request-Attribut javax.servlet.forward.request_uri, es enthält die ursprünglich angeforderte URI.

@RequestMapping("error/{errorId}") 
public ModelAndView resourceNotFound(@PathVariable Integer errorId, 
                HttpServletRequest request) { 
    //request.getAttribute("javax.servlet.forward.request_uri"); 
    String origialUri = (String) request.getAttribute(
               RequestDispatcher.FORWARD_REQUEST_URI); 

    return new ModelAndView("root/error.jspx", "originalUri", origialUri); 
} 

Wenn Sie noch 2.5 Servlet-API verwenden, dann ist die Konstante RequestDispatcher.FORWARD_REQUEST_URI existiert nicht, aber man kann request.getAttribute("javax.servlet.forward.request_uri") verwenden. oder aktualisiert auf javax.servlet:javax.servlet-api:3.0.1

+0

Wir sind auf einem Server, der Servlet API 3.0.x, aber mit 2.5 ab Spezifikation in der web.xml unterstützt. Mit dieser Einstellung haben die obigen Ansätze nichts nützliches ergeben, aber 'request.getAttribute (" javax.servlet.error.request_uri ");' hat den Trick gemacht –

Verwandte Themen