2015-07-20 70 views
1

javax.servlet.http.HttpServlet的實現中,在方法中引發異常。所以HTTP響應代碼是500更改javax.servlet.http.HttpServlet中的響應代碼

是否有可能將響應代碼設置爲其他內容?或者每當發生異常時每次都是500

+2

肯定。只需抓住Exception並使用'HttpServletRespons#setStatus()' - 參見http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html#setStatus%28int%29 –

回答

1

根據狀態碼的性質(4nn/5nn ==錯誤),只需檢查前提條件或捕獲異常並通過HttpServletResponse#setStatus()HttpServletResponse#sendError()設置所需的響應狀態。

您的問題的表達方式表明,在您的情況下,您無法使用例如簡單的預先檢查方式進行檢查。一個if聲明如下面的基本示例:

if (foo != null) { 
    processFoo(request, response, foo); 
} 
else { 
    response.sendError(HttpServletResponse.SC_BAD_REQUEST); 
} 

顯然它是第三方servlet左右。在這種情況下,創建一個servlet filter這確實低於工作在Filter#doFilter()方法,並將其映射到所需的servlet:

try { 
    chain.doFilter(request, response); 
} 
catch (ServletException e) { 
    if (e.getRootCause() instanceof IllegalArgumentException) { 
     response.sendError(HttpServletResponse.SC_BAD_REQUEST); 
    } 
    else { 
     throw e; 
    } 
} 

替代IllegalArgumentException與感興趣的異常,當然SC_BAD_REQUEST(400)與所述狀態碼出於興趣。

無論哪種方式,這會不會諮詢<error-page><exception-type>了,並在下面的錯誤頁面,從而結束了:

<error-page> 
    <status-code>400</status-code> 
    </location>/WEB-INF/errorpages/400.jsp</location> 
</error-page>