3

当抛出未处理的异常(例如 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>

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

4

3 回答 3

8

假设您已经配置了 Spring TilesViewResolverTilesConfigurer您可以尝试以下 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>

然后简单地定义逻辑视图error

<definition name="error" extends="common">
    <put-attribute name="body" value="/WEB-INF/jsp/error.jsp"/>
</definition>

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

于 2013-05-28T19:14:38.460 回答
1
<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="common11" template="/WEB-INF/jsp/common11.jsp">//common11 is same page as common.jsp
        <put-attribute name="header" value=""/>
        <put-attribute name="footer" value=""/>
    </definition>
   ...
   <definition name="main" extends="common">
       <put-attribute name="body" value="/WEB-INF/jsp/main.jsp"/>
       <put-attribute name="header" value=""/>
        <put-attribute name="footer" value=""/>
   </definition>
</tiles-definitions>
于 2013-05-28T13:10:17.713 回答
0

如果您使用的是 struts 2.0,那么在 struts.xml 中,您可以使用如下,或者如果您使用的是 jsp servlet,那么您可以在 web.xml 中使用以下

<global-results>
<result name="error">/WEB-INF/jsp/common.jsp</result>
</global-results>
于 2013-05-28T13:14:13.463 回答