java.lang.NoClassDefFoundError: javax/servlet/Filter
当我启动 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 放入类路径和 tomcat_home/commons/lib 文件夹中,
请任何人建议该怎么做。
I am getting this error when i start 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)
i have already put the servlet.jar in classpath and tomcat_home/commons/lib folder
please can any one suggest what to do.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
当您拥有源自古老 Servlet 2.2 容器或更早版本的 servlet.jar 的副本并且该文件在以下位置获得优先级时,可能会发生此特殊异常:通过 Tomcat 自己的库进行类加载。
Filter
类是引入的 在 Servlet 2.3 中。您不应该这样做。从
/WEB-INF/lib
、“classpath”和 Tomcat 的/common/lib
文件夹中删除所有 servletcontainer 特定的库。Tomcat servlet 容器已经在其自己的
/lib
文件夹中附带了正确的 API。您的 web 应用程序的/WEB-INF/lib
中不应该有任何副本,类路径中的其他位置也不应该有任何副本,也不应该来自完全不同的 servlet 容器的副本。尝试下载/复制随机 servlet 容器特定库的初学者常见错误通常是由于无法通过 javac 或在 IDE 中编译 servlet 类造成的。使用javac时,需要在
-cp
参数中引用Tomcat的/lib
。使用 IDE 时,您需要在项目属性中将 Tomcat 引用为目标运行时。另请参阅:
This particular exception can occur when you have got a copy of the
servlet.jar
which originated from an ancient Servlet 2.2 container or older and that file got precedence in classloading over Tomcat's own libraries. TheFilter
class was namely introduced in Servlet 2.3.You should not do that. Remove all servletcontainer-specific libraries from your
/WEB-INF/lib
, the "classpath" and the Tomcat's/common/lib
folders.The Tomcat servletcontainer already ships with the right APIs in its own
/lib
folder. You should not have any copy in your webapp's/WEB-INF/lib
, nor elsewhere in the classpath, also not the ones from a completely different servletcontainer.This common beginner's mistake of attempting to download/copy random servletcontainer specific libraries is commonly caused by the inability to compile servlet classes by javac or in the IDE. When using javac, you need to reference Tomcat's
/lib
in the-cp
argument. When using an IDE, you need to reference Tomcat as Targeted runtime in project's properties.See also:
将其添加到您的 pom.xml 中,并将该版本替换为任何最新的稳定版本。在 mvnrepository.com 中搜索 spring-web 并获取最新版本
add this to your pom.xml, replace the version with any latest stable version. search for spring-web in mvnrepository.com and get the latest version
无法找到导致问题的 servlet jar 的 jar 版本,我明确地将正确版本的 jar 添加到 Tomcat 类路径:
该 jar 位于
%TOMCAT_HOME%/lib
注意:确保 servlet-api jar 首先出现。
Unable to find the jar version of servlet jar that was causing issue, I explicitly added correct version of jar to Tomcat classpath :
This jar resides in
%TOMCAT_HOME%/lib
Note : ensure servlet-api jar appears first.
这是因为您在某处不应该有 servlet.jar。根据常见问题解答,确保您拥有的唯一 servlet.jar 位于 commons/lib 中。
It's because you have a servlet.jar somewhere that you shouldn't. Make sure the only servlet.jar you have is in commons/lib, per the FAQ.