【发布时间】:2016-06-07 19:16:02
【问题描述】:
问题
我想向用户显示自定义错误页面。简单地说,web.xml 上的<error-page> 似乎不起作用。我可以猜到问题出在哪里,但我需要了解它到底为什么不起作用。
我的设置
我在我的 spring mvc 应用程序中的 web.xml 上设置了<error-page>。以下是设置。
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
<url-pattern>*.*</url-pattern>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<error-page>
<error-code>404</error-code>
<location>/error</location>
</error-page>
我的错误页面位于...
WEB-INF
└ views
└ Errorpages
└ ErrorPage.jsp
为了您的信息,我也在下面尝试了这些方法,但这些方法都不起作用。
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/views/Errorpages/ErrorPage.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/views/Errorpages/ErrorPage.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/Errorpages/ErrorPage.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/ErrorPage.jsp</location>
</error-page>
<!-- Or tried those above without the .jsp that comes after ErrorPage -->
<!-- And also, tried those after moving the resources out of WEB-INF -->
第二次尝试
我查看了服务器日志,发现 Spring 尝试通过重定向查找资源,因此我改变了计划并尝试通过 Spring MVC 中的典型视图返回来实现这个目标。
我做了这个动作
@RequestMapping("/error")
public String throwsErrorPage(Locale locale, Model model) {
logger.info("Errorpage action..." + locale.getLanguage());
return "/Errorpages/ErrorPage";
}
我的预期部分正确,因为它成功地调用了这个动作。我的服务器日志很清楚。
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/notfound] in DispatcherServlet with name 'appServlet'
INFO : com.company.web.controller.HomeController - Errorpage action...ko
如您所见,我通过在 url 上键入 notfound 生成了 404 错误,并且它重定向到 /error,正如我在 web.xml 中的 <location> 中指定的那样。但它不会返回视图。
为确保操作返回视图,我尝试更改操作的类型,例如...
@RequestMapping("/error")
public ModelAndView throwsErrorPage(Locale locale, ModelAndView mv) {
logger.info("Errorpage action..." + locale.getLanguage());
return mv.setViewName("/Errorpages/ErrorPage");
}
但是效果不太好……
奇怪的事情
如果我通过localhost:8080/error 调用动作,它肯定会调用动作并返回预期的错误页面。好吧,重定向和通过在 url 或 ajax 上键入内容的典型请求之间应该存在一些差异。
我想知道的
- 如何使
<error-page>配置工作? -
Spring的自动重定向与Spring MVC中用户操作的典型请求有什么区别?
【问题讨论】:
标签: java spring spring-mvc