2012-01-24 65 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> 
相關問題