本文介紹了更改javax.servlet.http.HttpServlet中的響應代碼的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
在javax.servlet.http.HttpServlet
的實現中,在方法中引發異常。因此,HTTP響應代碼為500
。
是否可以將響應代碼設置為其他代碼?還是每次500
都發生異常?
推薦答案
只需檢查前提條件或捕獲異常并通過HttpServletResponse#setStatus()
或HttpServletResponse#sendError()
設置所需的響應狀態,具體取決于狀態代碼的性質(4NN/5NN==錯誤)。
問題的表述方式表明,在您的情況下,不可能使用以下基本示例所示的if
語句執行簡單的前置條件檢查:
if (foo != null) {
processFoo(request, response, foo);
}
else {
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
}
顯然它是一個第三方Servlet左右。在這種情況下,創建在Filter#doFilter()
方法中執行以下工作的servlet filter,并將其映射到所需的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>
這篇關于更改javax.servlet.http.HttpServlet中的響應代碼的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,