在JSP中捕获异常

时间:2012-04-24 23:21:26

标签: spring jsp exception nullpointerexception

我想知道如何处理这种情况,你对此有何看法?

我的JSP中有一个空指针异常。

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

这是因为我在spring中创建了一个Controller,以便处理对DB的查询并获得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,抛出nullpointer异常。

所以我的问题是: 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);
       }

这解决了发送Null String的问题,因为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的更好方法吗?

再次感谢

2 个答案:

答案 0 :(得分:1)

RuntimeException这样的{p> NullPointerException通常表示程序员在代码中的错误。即这是错误。你不应该抓住它们,但要通过正确预先检查来避免它们。在您的特定情况下,您错误地将其包装在另一个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。它最终会出现在容器的默认错误页面中,或者在<error-page>中指定为web.xml的页面。

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

答案 1 :(得分:1)

最好使用空值而不是csvString初始化null。因此它总是会转到jsp,如果你有一些有效的值你会渲染,否则你将在视图中显示为空。

另外请避免在jsp中使用scriptlet代码。它不可维护。