在jsp中捕获nullpointerexception失败

时间:2016-06-04 13:45:47

标签: java jsp

编写此代码是为了捕获nullpointerexception

<%@page import="model.Personne"%>
<%
    Personne p;
    try {
        p = (Personne) request.getAttribute("test");
    } catch (NullPointerException e) {
        out.print("<p>Exception catched " + e.getMessage() + "</p>");
        p = new Personne();
        p.name = "Albert";
    }
%>

但它没有捕获Glassfish日志所示的错误:

Warning:   StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw     exception
java.lang.NullPointerException
at org.apache.jsp.newjsp_jsp._jspService(newjsp_jsp.java:69)

关于Personne,这是一个非常简单的课程,仅供测试。

4 个答案:

答案 0 :(得分:2)

该行

p = (Personne) request.getAttribute("test");
如果请求不包含属性NullPointerException

会抛出p,但test只会为空。因此,当您使用null NullPointerException时,您的catch块不会被执行,之后会遇到p

答案 1 :(得分:0)

调用实例方法或属性时会发生空指针异常。在该行:

p = (Personne) request.getAttribute("test"); 

唯一的例子是“请求”,它永远不会为空。

你的逻辑必须是这样的:

Personne p;
p = (Personne) request.getAttribute("test");
if (p == null) {
    p = new Personne();
    p.name = "Albert";
}

答案 2 :(得分:0)

试试这个简单示例,您会发现NullPointerException会被抓住:

<%
    try {
        String p = null;
        out.print(p.toString());
    } catch (NullPointerException e) {
        out.print("<p>Exception catched " + e.getMessage() + "</p>");
    }
%>

与wero一样,我认为NPE会被抛弃。

答案 3 :(得分:0)

您可以在jsp页面中使用JSTL核心标记。 这是示例

 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title><c:catch> Tag Example</title>
</head>
<body>

<c:catch var ="catchException">
<%    Personne p; 
p = (Personne) request.getAttribute("test"); %>
</c:catch>

<c:if test = "${catchException != null}">
   <p>The exception is : ${catchException} <br />
   <%  p = new Personne();
       p.name = "Albert"; %>
</c:if>

</body>
</html>

Here is the Referencce