2012-01-24 64 views
1

如何在不更改浏览器中的URL的情况下向用户显示一般错误页面(如404)?Spring + Tiles - 在不更改URL的情况下显示错误页面?

因此,举例来说,如果用户进入/happy/fun/times一个页面,但没有这样的瓷砖查看我的web应用程序中存在/映射,我想要的网址留下来作为/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',然后404错误被web.xml捕获。但是,它只是显示'404.jsp'文件的内容,而不是我实际想要显示的tile视图'/ error/404'。

+0

我不是在做Spring MVC,但不是在'web.xml'中将它们指定为''这种常用的方式适合你? – BalusC

回答

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}访问异常实例。

+0

好吧,这工作显示错误,但是如果我想使用瓷砖视图而不是一个jsp文件是可能的?我一直在试图做的是使用'/ error/404'而不是'/WEB-INF/jsp/error/404.jsp',因为我想让瓷砖控制用户看到的东西(所以他们可以看到导航和类似的东西)。这是可能的,还是我必须手动包括导航和东西在404.jsp? – Fittersman

+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> 
相关问题