【问题标题】:Spring + Tiles - Show error page without changing URL?Spring + Tiles - 在不更改 URL 的情况下显示错误页面?
【发布时间】:2012-02-17 16:49:59
【问题描述】:

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

【问题讨论】:

  • 我不使用 Spring MVC,但不只是在 web.xml 中将它们指定为 &lt;error-page&gt;,这对您有用吗?

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


【解决方案1】:

我最终如何使用以下代码:

/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>

【讨论】:

    【解决方案2】:

    您可以这样做以按类型处理异常

    <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>
    

    如果你想要一个 spring 控制器或一个 spring 视图来解决异常,那么你需要声明一个 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}访问异常实例。

    【讨论】:

    • 好的,这可以显示错误,但是如果我想使用瓦片视图而不是 jsp 文件,这可能吗?我一直在尝试做的是使用类似 '/error/404' 而不是 '/WEB-INF/jsp/error/404.jsp' 因为我想让图块控制用户看到的内容(所以他们可以看到导航和类似的东西)。这是可能的还是我必须手动在 404.jsp 中包含导航和内容?
    猜你喜欢
    • 2022-01-08
    • 2019-11-11
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2016-10-28
    • 2021-11-27
    • 2012-11-23
    相关资源
    最近更新 更多