簡體   English   中英

如何正確處理我的servlet中的異常

[英]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);
}

NumberFormatExceptionRuntimeException

首先,永遠不要重定向到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM