2012-04-24 107 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代码。它不可维护。