本机环境是在myeclipse2017报错
错误信息可能是这样,很多时候碰到这样错误,不知道该怎么入手,下面是报空指向异常的其中一种情况
十一月 27, 2018 11:13:08 上午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [jsp] in context with path [/testjdbc] threw exception [An exception occurred processing JSP page /home.jsp at line 37
34: <td>鎿嶄綔2</td>
35: </tr>
36: <%
37: for(int i=0;i<user.length;i++){
38: %>
39: <tr>
40: <td><%=user[i].getUsername()%></td>
Stacktrace:] with root cause
java.lang.NullPointerException
at org.apache.jsp.home_jsp._jspService(home_jsp.java:155)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:789)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1437)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
主要的错误信息是:java.lang.NullPointerException
一般来说出现的错误都能从错误信息找到哪里错了:
从这句话能看出,错误的类型是空指向异常.
这里提示了,在home.jsp页面的37行错了(不要看到那里乱码了就以为是编码问题,要注意它的报错类型),其实这种在jsp页面的空指针比较好找,因为已经告诉你在哪里有可能会错了,接下来就取那里看一下
这是我的代码,37行可能错的是不是就是user》length这个位置啊,user就是上面23行那里从request域的userList里面取出来的,对象数组。
报错的原因:
user为null,你用了一个null的东西去使用length,可以尝试像上面那个图24行加一个判断是否为null。
有可能是你一运行项目就报错(可能这个页面是首页),或者点某个功能的时候报错,其实就是也是一个意思,user为空了。
就算注释掉37行,40-46行也会报错,因为在使用一个null的引用,可以不断地往上一步看看值到底是在哪里消失。
这里就不给解决的过程,因为每个人代码不一样,过程没什么太大用,主要是要理解出错的原因。
用一个程序模拟出错的原因:
从这段代码可以看到,user是==null,所以那个输出语句等于System.out.println("user对象的值为:" + null.getName());
使用一个null的引用,调用了未经初始化的对象或者是不存在的对象,一般这种类型的错误是这样的
所以肯定会报错。
理解了原因,接下来解决错误就好解决了。。。