如何在不更改浏览器中的网址的情况下向用户显示通用错误页面(例如404)?
例如,如果用户转到页面/happy/fun/times
但我的Web应用程序中不存在此类视图/映射,我希望URL保持为/happy/fun/times
,但会向其显示切片视图改为/error/404
。
此外,在相关说明中,如何处理所有错误,例如500错误或403错误?甚至是以某种方式可以通过的例外?
我尝试使用web.xml执行以下操作:
<error-page>
<error-code>500</error-code>
<location>/error/500</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error/404</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/error/403</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error/general</location>
</error-page>
然而,这似乎不起作用。如果我愿意,我可以将位置更改为'/WEB-INF/jsp/error/404.jsp',然后web.xml将捕获404错误。但是,它只显示'404.jsp'文件的内容,而不是我实际想要显示的图块视图'/ error / 404'。
答案 0 :(得分:2)
我最终如何做到这一点是使用以下代码:
/WEB-INF/jsp/error/404.jsp:
<%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<!-- insert the view -->
<tiles:insertDefinition name="baseLayout" >
<tiles:putAttribute name="body" value="<p> Error 404!! </p>" />
</tiles:insertDefinition>
的web.xml:
<error-page>
<error-code>500</error-code>
<location>/WEB-INF/jsp/error/500.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/jsp/error/404.jsp</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/WEB-INF/jsp/error/403.jsp</location>
</error-page>
答案 1 :(得分:0)
您可以按类型
执行此操作来处理异常<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/WEB-INF/jsp/error/uncaughtException.jsp</location>
</error-page>
或由HTTP错误代码处理
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/jsp/error/404.jsp</location>
</error-page>
如果您想要弹簧控制器或弹簧视图来解决异常,那么您需要声明一个SimpleMappingExceptionResolver类型的Spring bean。
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" p:defaultErrorView="uncaughtException">
<property name="exceptionMappings">
<props>
<prop key=".DataAccessException">dataAccessFailure</prop>
<prop key=".NoSuchRequestHandlingMethodException">resourceNotFound</prop>
<prop key=".TypeMismatchException">resourceNotFound</prop>
<prop key=".MissingServletRequestParameterException">resourceNotFound</prop>
</props>
</property>
</bean>
在JSP页面中,您可以通过$ {exception}。
访问异常实例