当抛出未处理的异常时(例如RuntimeException
),我想显示一个常见的错误页面。
我想实现一些目标:
我正在使用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
属性来指定异常页面的定义...
答案 0 :(得分: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>
然后只需定义逻辑视图error
:
<definition name="error" extends="common">
<put-attribute name="body" value="/WEB-INF/jsp/error.jsp"/>
</definition>
这会将任何Throwable
转发到右侧视图,您可以在其中访问异常(${exception}
)。这不会替换所有标准HTTP错误页面(对于404等)
答案 1 :(得分: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>
答案 2 :(得分:0)
如果你在struts.xml中使用struts 2.0, 您可以使用如下, 或者如果您正在使用jsp servlet,那么您可以在web.xml中使用以下
<global-results>
<result name="error">/WEB-INF/jsp/common.jsp</result>
</global-results>