2009-07-28 16 views
22

私は以下のようにweb.xmlを設定しました。また、私はアノテーションベースのコントローラを持っています。これは任意のURLパターンを受け取り、対応するJSPに移動します(これを-servlet.xmlに設定しました)。しかし、.htmlで終わるページ(そしてjspが存在しないページ)に行くと、カスタム404ページが表示されません(また、ログに以下のエラーが表示されます)。 .htmlで終わらないページは、カスタム404ページが表示されます。カスタム404 Spring DispatcherServletを使用して

DispatcherServletを通過するページに対してカスタム404ページを設定するにはどうすればよいですか?

また、エラーページを静的ページ(つまりerror.htm)に設定した場合は動作しますが、jsp(つまりerror.jsp)に変更すると、IllegalStateExceptionが発生します。どんな助けもありがとう。

ログエラー

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) 

コントローラ

@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

この試してみてください - > http://ekiras.blogspot.in/を2015/02/custom-error-404-page-in-spring-mvc.html –

答えて

34

1つのオプションは、あなたのディスパッチャサーブレットを介してすべてのあなたのエラーページをマップすることです。

新しいHTTPエラーコントローラの作成:


@Controller 
public class HTTPErrorController { 

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

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

}

web.xmlのエラーページの地図を

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

@Stefan Haberl、単純なポストを新しい回答として投稿するのではなく、@ Robの投稿を変更するのはなぜですか? – sarnold

+1

誰でもこのソリューションが動作することを確認できますか?それは私のためではありません(Spring 3.0.5) – Jason

+0

このコード例は、いくつかのアプリケーションからほぼそのまま出力され、期待どおりに動作します。あなたはどんな問題を抱えていますか?私はデバッグを助けることができます。 –

関連する問題