2013-11-26 77 views
1

我正在嘗試處理由JSP視圖引發的異常。由於Spring MVC無法直接處理這些異常,因爲它們被拋出了控制器的範圍,我試圖通過HandlerInterceptorAdapter來處理它們。在JSP異常完成視圖呈現後重定向

afterCompletion方法使我可以訪問從JSP引發的Exception,因此我可以使用唯一的錯誤ID記錄異常。但除此之外,我想向用戶顯示一個用戶友好的錯誤頁面。所以我的第一個想法是將用戶重定向到我現有的錯誤頁面,該頁面顯示了唯一的錯誤ID。

但似乎重定向被忽略。在這個方法中可以做重定向嗎?或者是不可能改變回應,因爲它已經被渲染了?

這是我第一次嘗試:

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.http.HttpStatus; 
import org.springframework.stereotype.Component; 
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; 

import de.lwv.mass2.client.web.controller.BasicExceptionHandlerController; 

@Component 
public class JspExceptionHandler extends HandlerInterceptorAdapter { 

    private static Logger LOGGER = LoggerFactory.getLogger(JspExceptionHandler.class); 

    @Override 
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { 

     if (ex != null) { 
      final String uuid = BasicExceptionHandlerController.generateExceptionUUID(); 

      LOGGER.error("Exception: " + uuid, ex); 
      // redirect 
      response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); 
      response.sendRedirect(request.getContextPath() + "/error?id=" + uuid); 
     } 
    } 
} 
+0

我有同樣的問題.. – mainlove

回答

1

我想響應已經提交(和視圖渲染)時afterCompletion被調用。

作爲替代方案的建議,你可以添加一個error-pageweb.xml這將作爲一個「包羅萬象的」處理程序 - 捕從JSP的觀點和其他異常可能不是由HanlderInterceptorAdapter

辦理始發例外例如,在你的web.xml,您可以添加:

<error-page> 
    <error-code>500</error-code> 
    <location>/error</location> 
</error-page> 

<error-page> 
    <exception-type>java.lang.Exception</exception-type> 
    <location>/error</location> 
</error-page> 

您還可以通過錯誤代碼定義這些

<location>可以是另一個控制器,靜態HTML頁面或JSP視圖 - 如下所示。

<error-page> 
    <error-code>500</error-code> 
    <location>/WEB-INF/jsp/500.jsp</location> 
</error-page> 
+0

這就是我最終做的。我遵循本指南介紹瞭如何從Spring MVC控制器中提取異常信息:http://www.javacodegeeks.com/2013/11/how-to-custom-error-pages-in-tomcat-with-spring- mvc.html –