Custom 404 с использованием Spring DispatcherServlet
Я настроил web.xml, как показано ниже. У меня также есть контроллер на основе аннотаций, который принимает любой шаблон URL и затем переходит к соответствующему jsp (я настроил это в файле -servlet.xml). Однако, если я перехожу на страницу, которая заканчивается на .html (и чей jsp не существует), я не вижу пользовательскую страницу 404 (и вижу ошибку в журнале ниже). На любой странице, которая не заканчивается на .html, я вижу пользовательскую страницу 404.
Как настроить настраиваемую страницу 404 для любой страницы, которая проходит через DispatcherServlet?
Также хочу добавить, что если я устанавливаю свою страницу ошибки на статическую страницу (т.е. error.htm), она работает, но если я изменяю ее на jsp (т.е. error.jsp), я получаю исключение IllegalStateException. Любая помощь будет оценена.
log error
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)
controller
@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>