问题是我在Tomcat的NullPointerException
中获得WebappClassLoaderBase
而没有太多解释为什么会发生这种情况。据我所知,它从版本8.0.35开始发生.....
java.lang.NullPointerException
org.apache.catalina.loader.WebappClassLoaderBase.binaryNameToPath(WebappClassLoaderBase.java:2562)
org.apache.catalina.loader.WebappClassLoaderBase.findLoadedClass0(WebappClassLoaderBase.java:2730)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1208)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1166)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2508)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2497)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
web.xml
:<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>FirstServlet</servlet-name>
<async-supported>true</async-supported>
</servlet>
<servlet>
<servlet-name>SecondServlet</servlet-name>
<enabled>false</enabled>
</servlet>
<session-config>
<session-timeout>7</session-timeout>
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
</session-config>
<security-constraint>
<display-name>HTTPS</display-name>
<web-resource-collection>
<web-resource-name>HTTPS Constraint</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<!-- IMPORTED web.xml MODULES END -->
</web-app>
答案 0 :(得分:2)
我通过在<servlet-class>
文件中添加web.xml
标记解决了这个问题。
AFAICT我不应该这样做,因为在我的代码中我有@WebServlet
注释,这些注释应该已经用Tomcat注册了类名。
答案 1 :(得分:0)
我在Debian Wheezy Linux,Java 8,Jersey 2.24,Tomcat 8.0.38上开发时看到了这个问题,并尝试在我的开发人员文件中将war文件部署到Tomcat 8.0,该文件默认使用操作系统中的Java 7 。我安装了多个Java版本用于开发。为了解决这个问题,我创建了一个简短的脚本来将JAVA_HOME和JRE_HOME变量导出为相应的Java 8位置,然后按顺序运行Tomcat bin / shutdown.sh和bin / startup.sh。这解决了这个问题。
如果将应用程序部署到可操作的Tomcat,则可以编辑/ etc / default / tomcat8文件以设置JAVA_HOME,因为操作系统上的默认值可能是错误的版本。
底线是小心,假设Tomcat将在系统上找到正确的Java版本。