编写此代码是为了捕获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,这是一个非常简单的课程,仅供测试。
答案 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>