2009-07-28 5 views
22

Ho impostato web.xml come di seguito. Ho anche un controller basato su annotazioni, che accetta qualsiasi pattern URL e poi passa al jsp corrispondente (l'ho impostato nel file -servlet.xml). Tuttavia, se vado a una pagina che termina con .html (e di cui jsp non esiste), non vedo la pagina 404 personalizzata (e vedo l'errore di seguito nel registro). Qualsiasi pagina che non finisce in .html, posso vedere la pagina 404 personalizzata.Personalizzato 404 utilizzando Spring DispatcherServlet

Come è possibile configurare una pagina 404 personalizzata per qualsiasi pagina che attraversa DispatcherServlet?

Inoltre, desidero aggiungere che se imposto la pagina di errore su una pagina statica (ad es. Error.htm) funziona, ma se lo cambio in un jsp (es. Error.jsp), ottengo l'IllegalStateException. Qualsiasi aiuto sarebbe apprezzato.

errori di registro

Caused by: java.lang.IllegalStateException: getOutputStream() has already been called for this response 
at org.apache.catalina.connector.Response.getWriter(Response.java:606) 
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:195) 
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:124) 

regolatore

@RequestMapping(value = {"/**"}) 

public ModelAndView test() { 

    ModelAndView modelAndView = new ModelAndView(); 

    return modelAndView; 
} 

web.xml

<servlet> 
<servlet-name>my_servlet</servlet-name> 
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
</servlet> 

...

<servlet-mapping> 
    <servlet-name>my_servlet</servlet-name> 
    <url-pattern>*.html</url-pattern> 
</servlet-mapping> 

...

<error-page> 
    <error-code>404</error-code> 
    <location>/error.html</location> 
</error-page> 
+0

Prova questo -> http://ekiras.blogspot.in/ 2015/02/custom-error-404-error-page-in-spring-mvc.html –

risposta

34

Una possibilità è quella di mappare tutte le pagine di errore attraverso il vostro servlet dispatcher.

Creare un nuovo controller di errore HTTP:


@Controller 
public class HTTPErrorController { 

    @RequestMapping(value="/errors/404.html") 
    public String handle404() { 
     return "errorPageTemplate"; 
    } 

    @RequestMapping(value="/errors/403.html") 
    ... 

}

Mappa delle pagine di errore in web.xml

<error-page> 
    <error-code>404</error-code> 
    <location>/errors/404.html</location> 
</error-page>
+0

@Stefan Haberl, perché cambiare il post di Rob piuttosto che postare la tua versione semplificata come una nuova risposta? – sarnold

+1

Qualcuno può verificare che questa soluzione funzioni? Non fa per me (Spring 3.0.5) – Jason

+0

Questo esempio di codice è quasi alla lettera da alcune delle nostre applicazioni e funziona come previsto. Che problema stai avendo? Posso aiutare a eseguire il debug. –