Spring + Tiles - 显示错误页面而不更改URL?

时间:2012-01-24 12:32:47

标签: servlets spring-mvc http-status-code-404

如何在不更改浏览器中的网址的情况下向用户显示通用错误页面(例如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'。

2 个答案:

答案 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}。

访问异常实例