2012-04-24 105 views
0

我想知道如何處理這種情況,以及您對此有何建議。在JSP中捕獲異常

我在我的JSP中有一個空指針異常。

String csvDataIn = new String ((String)request.getAttribute("csvString")); 

這是因爲,我已經爲了處理查詢到數據庫並獲得csvString創建控制器在春季。一切工作正常,直到我做了一個失敗的查詢。

因此,在控制器:

... 
    JsonNode json = dataRepository.getDataAsJson(dataNode); 
    csvString = getCSVfromJsonNode(json); 
       model.addAttribute("csvString", csvString); 
      } catch (Exception e) { 
       Logger.log("CSV controller failed", _moduleClass, e); 
      } 
      return "exportCSV"; 
     } 

所以變量JSON是從來沒有填充,因爲函數getDataAsJson()失敗。所以這是拋出一個例外。然後我返回到exportCSV.jsp,但是我沒有返回模型中的屬性csvString。

因此,回到jsp中,拋出了空指針異常。

所以我的問題是: a-如何在JSP中捕獲這些異常? b-你認爲比JSP更好的解決方案嗎?我的意思是這可能是最佳做法。

在此先感謝。

感謝您的回覆。他們真的很有幫助:爲了解決這個問題,我進行了以下修改。

... 
     JsonNode json = dataRepository.getDataAsJson(dataNode); 
     model.addAttribute("csvString", csvString); 
     } catch (Exception e) { 
     Logger.log("CSV controller failed", _moduleClass, e); 
     } 
     return "exportCSV"; 
     csvString = getCSVfromJsonNode(json); 
     } 

這解決了發送空字符串的問題,因爲csvString是之前創建的bean,爲空。

,我在這裏我得到的例外是javax.xml.ws.webserviceexception無法發送消息(你知道一個更好的方式在控制器來處理呢?)

我也是在JSP這樣做側,以防萬一:

String csvDataIn = (String)request.getAttribute("csvString"); 
//This should never happen, but we check anyway. 
if (csvDataIn != null){ 
... 
} 

所以,我可以留在唯一的疑問是:你知不知道有更好的方式在控制器來處理javax.xml.ws.webserviceexception?

再次感謝

+0

異常處理就像你在說什麼屬於控制器。 – Marvo 2012-04-24 23:31:12

回答

1

RuntimeException就像NullPointerException S鍵通常表明代碼程序員的錯誤。即它是錯誤的。你不應該抓住他們,但通過適當的預先檢查避免他們。在你的具體情況下,你錯誤地把它包裝在另一個new String()。如果屬性是null,那麼它會拋出NullPointerException。刪除。

E.g.

String csvDataIn = (String) request.getAttribute("csvString"); 

if (csvDataIn != null) { 
    // Do your job here. 
} 
else { 
    // Just ignore it? 
} 

但畢竟,業務邏輯真的不屬於JSP。你應該在控制器中完成這項工作,並且給JSP 確切地說是它需要的數據來裝飾一些HTML。如果您在控制器中遇到真正不可恢復的異常,請將其重新拋出爲ServletException。它將在容器的默認錯誤頁面中結束,或者在web.xml中指定爲<error-page>

} catch (Exception e) { // Please be more specific. 
    throw new ServletException("Converting to CSV failed", e); 
} 
+0

我在控制器中得到的異常是「javax.xml.ws.webserviceexception無法發送消息」,你知道更好的方法來處理這個嗎?你應該建議做一個額外的驗證? (就像我之前告訴過你的,我問這是因爲我想學習如何以更好的方式處理異常。)感謝您的答案 – Juano7894 2012-04-25 10:59:31

+0

這是一個嚴重的異常,表明您的web服務請求有問題,或者與外部web服務服務器本身連接。到目前爲止,您應該讓異常一直到達容器,以便它以錯誤頁面結束。如何解決**特定例外的原因**是一個故事。我開始閱讀web服務API文檔或聯繫webservice支持團隊如何解決特定異常的原因。 – BalusC 2012-04-25 14:02:03

+0

謝謝,我做了一些更改。我在控制器中進行了處理並將其添加到存儲庫中。所以現在將在存儲庫中失敗。還有一個疑問,我不會再打擾你了。當你說「你應該讓異常一直到容器」時,你的意思是這個異常應該去jsp,然後處理jsp失敗頁? – Juano7894 2012-04-25 14:45:20

1
更好

你有一個空值,而不是null初始化csvString。所以它會一直到jsp,如果你有一些有效的值你會渲染,否則你會在視圖中顯示爲空。

另外請避免在jsp中使用scriptlet代碼。它不可維護。