使用Spring的DispatcherServlet自定义404(Custom 404 using

2019-06-17 18:00发布

我下面设立的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>

Answer 1:

一种选择是通过你的分发程序Servlet所有的错误页面映射。

创建一个新的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>


文章来源: Custom 404 using Spring DispatcherServlet