启动tomcat时出现此错误
java.lang.NoClassDefFoundError: javax/servlet/Filter
at java.lang.ClassLoader.findBootstrapClass(Native Method)
at java.lang.ClassLoader.findBootstrapClass0(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1301)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1232)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:207)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:302)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:78)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3666)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4258)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:448)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
我已将servlet.jar放在classpath和tomcat_home / commons / lib文件夹中
请任何人建议做什么。
答案 0 :(得分:9)
java.lang.NoClassDefFoundError:javax / servlet / Filter
当您获得源自古老Servlet 2.2容器或更早版本的servlet.jar
的副本并且该文件在通过Tomcat自己的库进行类加载时优先时,可能会发生此特殊异常。 Servlet 2.3中的Filter
类是introduced。
我已将servlet.jar放在classpath和tomcat_home / commons / lib文件夹中
你不应该这样做。 从/WEB-INF/lib
,“classpath”和Tomcat的/common/lib
文件夹中删除所有特定于servletcontainer的库。
Tomcat servletcontainer 已经在其自己的/lib
文件夹中附带了正确的API。您不应该在webapp的/WEB-INF/lib
中,也不应该在类路径的其他地方有任何副本,也不应该是来自完全不同的servlet容器的副本。
这个常见的初学者试图下载/复制随机servletcontainer特定库的错误通常是由于无法通过javac或IDE编译servlet类。使用javac时,需要在/lib
参数中引用Tomcat的-cp
。使用IDE时,需要在项目属性中将Tomcat引用为 Targeted runtime 。
答案 1 :(得分:1)
无法找到导致问题的servlet jar的jar版本,我明确地将正确版本的jar添加到Tomcat类路径中:
此jar位于%TOMCAT_HOME%/lib
注意:确保首先出现servlet-api jar。
答案 2 :(得分:0)
这是因为你have a servlet.jar somewhere that you shouldn't。根据常见问题解答,确保您拥有的servlet.jar只在commons / lib中。
答案 3 :(得分:0)
将其添加到您的pom.xml中,将该版本替换为任何最新的稳定版本。在mvnrepository.com中搜索spring-web并获取最新版本
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>