使用Spring DispatcherServlet的自定义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;

}

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>

回答:

一种选择是通过调度程序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>

以上是 使用Spring DispatcherServlet的自定义404 的全部内容, 来源链接: utcz.com/qa/418245.html

回到顶部