Apache Tiles和Spring MVC中的全局异常页面

Pro*_*lon 3 java spring spring-mvc apache-tiles

当抛出未处理的异常(例如a RuntimeException)时,我想显示一个常见的错误页面.

我想实现一些目标:

  • 重用HTML模板(使用带标题的常见"框架"等)并将异常信息放在正文中
  • 提供有关正文文档中的异常的一些基本信息

我正在使用Apache Tiles和Spring MVC.什么是我的问题的好方法?

我的部分瓷砖定义:

<tiles-definitions>
    <definition name="common" template="/WEB-INF/jsp/common.jsp">
        <put-attribute name="header" value="header"/>
        <put-attribute name="footer" value="/WEB-INF/jsp/footer.jsp"/>
    </definition>
   ...
   <definition name="main" extends="common">
       <put-attribute name="body" value="/WEB-INF/jsp/main.jsp"/>
   </definition>
</tiles-definitions>
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想通过设置body属性来指定异常页面的定义...

eme*_*esx 8

假设你有Spring TilesViewResolver并且已经TilesConfigurer配置,你可以尝试以下bean定义:

<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
   <property name="exceptionMappings">
      <props>
         <prop key="java.lang.Throwable">error</prop>
      </props>
   </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

然后只需定义逻辑视图error:

<definition name="error" extends="common">
    <put-attribute name="body" value="/WEB-INF/jsp/error.jsp"/>
</definition>
Run Code Online (Sandbox Code Playgroud)

这会将任何内容转发Throwable到右侧视图,您可以在其中访问异常本身(${exception}).这不会替换所有标准HTTP错误页面(对于404等)