22

以下のようにweb.xmlを設定しました。また、任意の URL パターンを取り込み、対応する jsp に移動する注釈ベースのコントローラーもあります (-servlet.xml で設定しました)。ただし、.html で終わる (そして jsp が存在しない) ページに移動すると、カスタム 404 ページが表示されません (ログに以下のエラーが表示されます)。.html で終わらないページには、カスタム 404 ページが表示されます。

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>
4

1 に答える 1

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>
于 2009-08-10T01:07:39.600 に答える