2009-07-28 22 views
22

Web.xml'yi aşağıdaki gibi kurdum. Ayrıca herhangi bir URL modelini alan ve sonra ilgili jsp'ye giden bir açıklama-tabanlı denetleyicim var (bunu -servlet.xml dosyasında belirledim). Ancak, .html (ve kimin jsp'si yok) ile biten bir sayfaya gidersem, özel 404 sayfasını görmüyorum (ve günlükte aşağıdaki hatayı görüyorum). .html ile bitmeyen herhangi bir sayfa, özel 404 sayfasını görebilirim.Spring DispatcherServlet kullanarak Özel 404

DispatcherServlet'in içinden geçen herhangi bir sayfa için özel bir 404 sayfasının nasıl yapılandırılacağını nasıl yapılandırabilirim?

Ayrıca, hata sayfamı statik bir sayfaya (ör. Error.htm) ayarladığımda çalışır, ancak jsp'ye (ör. Error.jsp) değiştirirsem, IllegalStateException değerini aldığımı eklemek isterim. Herhangi bir yardım takdir edilecektir.

log hatası

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) 

kontrolör

@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

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

cevap

34

Bir seçenek dağıtıcınız servlet aracılığıyla tüm hata sayfaları eşlemek etmektir.

yeni HTTP hata denetleyicisi oluşturun:


@Controller 
public class HTTPErrorController { 

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

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

}

web.xml''deki hata sayfaları Harita

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

@Stefan Haberl, neden basitleştirilmiş versiyonunu yeni bir cevap olarak göndermekten ziyade Rob's post'u değiştiriyor? – sarnold

+1

Bu çözümün işe yaradığını kimse doğrulayabilir mi? Benim için değil (İlkbahar 3.0.5) – Jason

+0

Bu kod örneği, bazı uygulamalarımızdan hemen hemen kesindir ve beklendiği gibi çalışır. Ne problemin var? Hata ayıklamaya yardımcı olabilirim. –

İlgili konular