[英]How to handle exception in my servlet correct
我在使異常做我想做的時候遇到一些問題! 我創建了一個servlet,我想處理所有異常。 我也需要幫助的這種情況下的班級建設也可以在這里看到:
Servlet:此異常處理僅適用於1種方法,
try {
completed = func.addNewOperator(userId, name, ini, cpr, password, role);
}catch (Exception e) {
Error = "There was a problem with database access";
response.sendRedirect("SystemError.jsp?Error_resultat=" + Error);
} catch (IOException e) {
Error = "Error found with connection";
response.sendRedirect("SystemError.jsp?Error_resultat=" + Error);
} catch (RuntimeException e) {
Error = "Error found with entered values";
response.sendRedirect("SystemError.jsp?Error_resultat=" + Error);
} catch (Exception e) {
Error = "Serious error found!";
response.sendRedirect("SystemError.jsp?Error_resultat=" + Error);
func.addNewOperator在我的函數類中被調用:
功能:
您可以在下面看到我的函數方法的一個小例子:
public boolean addNewOperator(String userId, String name, String ini, String cpr, String password, String role ) throws Exception {
int id = Integer.parseInt(userId);
}
因此,可以說如果它不能將其解析為整數,它應該向我的servlet拋出異常,但這是行不通的。 我想將異常拋出給servlet,然后servlet應該發送響應以打開SystemError.jsp,並以一條錯誤消息作為參數。
誰能看到我是否忘記了什么?
順序是先匹配的,然后執行get ( 正如JLS明確解釋的那樣 )。
如果第一個catch匹配到異常,則執行,否則,將嘗試下一個,並不斷地進行直到匹配或沒有匹配。
因此,在捕獲異常時,您始終希望始終首先捕獲最具體的異常,然后再捕獲最通用的異常(如RuntimeException或Exception)。
閱讀更多Java捕獲異常的順序
catch (Exception e)
應該是鏈中的最后一個catch
塊。
值得閱讀Oracle Java教程-異常
以這種方式嘗試,不要忘記將異常記錄在日志文件中。
try {
completed = func.addNewOperator(userId, name, ini, cpr, password, role);
}catch (SQLException e) {
Error = "There was a problem with database access";
} catch (IOException e) {
Error = "Error found with connection";
} catch (RuntimeException e) {
Error = "Error found with entered values";
} catch (Exception e) {
Error = "Serious error found!";
}
if(Error != null){
response.sendRedirect("SystemError.jsp?Error_resultat=" + Error);
}
NumberFormatException
是RuntimeException
。
首先,永遠不要重定向到jsp頁面,而應轉發到它。 通常,jsp文件位於WEB-INF
,從不直接調用,而是始終通過服務器調用。 這是轉發的一個示例(來自Java技巧-如何將請求從Servlet轉發到JSP:) :
request.setAttribute("error", error);
getServletConfig().getServletContext().getRequestDispatcher("/WEB-INF/SystemError.jsp")
.forward(request,response);
並通過${error}
在jsp中獲取error
(第一個字母小寫,因為這是一個變量)
而且無論如何,您不應該在servlet級別上處理該問題,而應按照SO的另一篇文章中的解釋,將此低級作業委托給容器: 如何在JSP / Servlet應用程序中正確處理異常? 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.