복붙노트

[SPRING] Spring DispatcherServlet을 사용하는 Custom 404

SPRING

Spring DispatcherServlet을 사용하는 Custom 404

나는 아래와 같이 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;
}

을 포함한다.

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

해결법

  1. ==============================

    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>
  2. from https://stackoverflow.com/questions/1196569/custom-404-using-spring-dispatcherservlet by cc-by-sa and MIT license