问题描述
当我启动tomcat时出现这个错误
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)
我已经将 servlet.jar 放在 classpath 和 tomcat_home/commons/lib 文件夹中
i have already put the servlet.jar in classpath and tomcat_home/commons/lib folder
请任何人建议该怎么做.
please can any one suggest what to do.
推荐答案
当您获得源自古老的 Servlet 2.2 容器或更早版本的 servlet.jar
副本并且该文件在类加载中优先于 Tomcat 自己的库时,可能会发生这种特殊的异常.Filter
类是引入 在 Servlet 2.3 中.
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. The Filter
class was namely introduced in Servlet 2.3.
我已经把 servlet.jar 放在 classpath 和 tomcat_home/commons/lib 文件夹中
你不应该那样做.从您的 /WEB-INF/lib
中删除所有 servletcontainer 特定的库,即类路径"和 Tomcat 的 /common/lib
文件夹.
You should not do that. Remove all servletcontainer-specific libraries from your /WEB-INF/lib
, the "classpath" and the Tomcat's /common/lib
folders.
Tomcat servletcontainer已经在它自己的/lib
文件夹中提供了正确的API.您不应在 web 应用程序的 /WEB-INF/lib
或类路径中的其他地方拥有任何副本,也不应在完全不同的 servletcontainer 中拥有任何副本.
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.
这种尝试下载/复制随机 servletcontainer 特定库的常见初学者错误通常是由于无法通过 javac 或在 IDE 中编译 servlet 类造成的.使用javac时,需要在-cp
参数中引用Tomcat的/lib
.使用 IDE 时,您需要在项目的属性中将 Tomcat 引用为 Targeted runtime.
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.
这篇关于java.lang.NoClassDefFoundError: javax/servlet/Filter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!