在javax.servlet.http.HttpServlet
的實現中,在方法中引發異常。所以HTTP響應代碼是500
。更改javax.servlet.http.HttpServlet中的響應代碼
是否有可能將響應代碼設置爲其他內容?或者每當發生異常時每次都是500
?
在javax.servlet.http.HttpServlet
的實現中,在方法中引發異常。所以HTTP響應代碼是500
。更改javax.servlet.http.HttpServlet中的響應代碼
是否有可能將響應代碼設置爲其他內容?或者每當發生異常時每次都是500
?
根據狀態碼的性質(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>
肯定。只需抓住Exception並使用'HttpServletRespons#setStatus()' - 參見http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html#setStatus%28int%29 –