开发问题快速定位之JSP_NullPointerException
1、先创建一个Dynamic Web Project名为jspnpe,其中npe为NullPointerException简称,可以知道这个项目是用来演示jsp的空指针异常的。
注意:新建的时候,直接点Finish,使用默认配置即可,这里默认你已经配置好开发环境了,配置环境部署本文重点。
2、我们新建一个index.jsp,方法:右键WebContent->New->JSP File,
名称改为index.jsp然后点Finish即可
3、我们写一句可以触发空指针异常的代码:
<%=session.getAttribute("userLogin").toString()%>
4、发布运行后,访问
http://localhost:8080/jspnpe
可以看到页面上已经有了空指针异常的提示了
java.lang.NullPointerException
org.apache.jsp.index_jsp._jspService(index_jsp.java:118)
5、这里是非常简单的JSP页面,所以会有提示在哪一行报空指针异常:
org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 10
这里是精确提示你index.jsp在第10行报空指针异常,而且第10行代码也已给出:
10: <%=session.getAttribute("userLogin").toString()%>
但是在实际项目中,比如我使用SSH开发的,并没有提示的那么精确,因此需要进行第二步的定位空指针,页面上给出了
java.lang.NullPointerException
org.apache.jsp.index_jsp._jspService(index_jsp.java:118)
就是这个118行,这个提示在使用框架的时候也会出现,不会被隐藏,
重点就是找到这个index_jsp.java:118在哪里
咋一看这个包org.apache.jsp.index_jsp._jspService,以为是apache的官方源码包,其实并不是,而是我们的代码被编译后,默认生成的,
位置就在Tomcat的位置下:apache-tomcat-8.0.30\work\Catalina\localhost\jspnpe\org\apache\jsp\index_jsp.java,只要打开这个文件,找118行,就能找出哪一个代码引发异常,然后就可以修改了
6、打开index_jsp.java看到118行的代码:
out.print(session.getAttribute("userLogin").toString());
正是符合了我们的预期,因为这段代码会导致空指针,
修改也很简单,因为session变量里面并没有保存userLogin属性,
因此session.getAttribute("userLogin")肯定是空的,
然后调用toString()方法必然会引发空指针异常
修复方法是在调用toString()方法前判断session.getAttribute("userLogin")不为空即可。
本文完,谢谢阅读。