所以我的情况有点奇怪,因为我正在查看一个没有访问源代码的服务器。到目前为止,与 servlet 相关的一切都运行良好,但是关于其中一个具有空指针异常的 Java servlet 出现了这种突然的、自发的错误。
错误日志如下:
INFO: Added header: Cache-Control: no transform
8-Apr-2014 10:57:16 AM org.apache.catalina.core.ApplicationContext log
INFO: Added header: Cache-Control: no cache
8-Apr-2014 10:57:16 AM org.apache.catalina.core.ApplicationContext log
INFO: Attempted context: null
8-Apr-2014 10:57:16 AM org.apache.catalina.core.ApplicationContext log
INFO: Request URI: /public_stage//def.jsp
8-Apr-2014 10:57:16 AM org.apache.catalina.core.ApplicationContext log
INFO: Real path: /opt/apps/tomjet/webapps/public_stage/def.jsp
8-Apr-2014 10:57:16 AM org.apache.catalina.core.ApplicationContext log
INFO: servlet context: null
8-Apr-2014 1:35:02 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet PushServletMAG threw exception
java.lang.NullPointerException
at com.openwave.wappush.Pusher.netSendRequest(Pusher.java:312)
at com.openwave.wappush.Pusher.send(Pusher.java:230)
at ca.test.servlet.ExtendedPush.pushServiceIndication(ExtendedPush.java:105)
at ca.test.servlet.CDMAPushServlet.doPost(CDMAPushServlet.java:180)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:419)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:619)
但是转到 catalina 文件,我注意到它声明在几个位置,它正在尝试验证 .jar 文件,并且在 WEB-INF/lib 目录中有 servlet.jar 文件未加载。
这是一个具有特定位置的行的示例:
8-Apr-2014 2:02:00 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/opt/apps/tomjet/webapps/wapMIG/WEB-INF/lib/servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
总的来说,我对这个问题感到很困惑,因为就用户与源代码的交互而言,绝对没有,因为没有人可以访问它。它是如此突然和自发。
有什么想法/资源可以帮助我解决这个问题吗?非常感谢。
最佳答案
错误是您的 WEB-INF/文件夹中的 jar servlet-api.jar,容器提供 servlet-api.jar 并导致部署问题,您需要从 lib 文件夹中删除此 jar。 你可能需要这个 jar 来编译你的项目,所以你必须配置项目以在你的 IDE 中使用这个 jar,在 eclipse 中你可以将它作为外部 jar 添加到 Java 构建路径中,但我建议你启用 Web 动态项目Facet 并将 tomcat 配置为您的运行时环境。 (项目 -> 属性 -> 项目方面)
关于apache - Java Servlet - 空指针异常和 .jar 未加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22946590/