java.lang.NoClassDefFoundError:javax/servlet/Filter

pre*_*rem 4 tomcat servlets

当我启动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)
Run Code Online (Sandbox Code Playgroud)

我已经将servlet.jar放在classpath和tomcat_home/commons/lib文件夹中

请任何人建议做什么.

Bal*_*usC 9

java.lang.NoClassDefFoundError:javax/servlet/Filter

当您获得servlet.jar源自古老Servlet 2.2容器或更旧版本的副本并且该文件在通过Tomcat自己的库进行类加载时优先时,可能会发生此特殊异常.这个Filter类是在Servlet 2.3中引入的.


我已经将servlet.jar放在classpath和tomcat_home/commons/lib文件夹中

你不应该这样做.从您的"类路径"和Tomcat的文件夹中删除所有特定于servletcontainer的库./WEB-INF/lib/common/lib

Tomcat servletcontainer 在其自己的/lib文件夹中附带了正确的API .您不应该在您的webapp中有任何副本/WEB-INF/lib,也不应该在类路径的其他地方有任何副本,也不应该是来自完全不同的servlet容器的副本.

这个常见的初学者试图下载/复制随机servletcontainer特定库的错误通常是由于无法通过javac或IDE编译servlet类.使用javac时,需要/lib-cp参数中引用Tomcat .使用IDE时,需要在项目属性中将Tomcat引用为Targeted runtime.

也可以看看:

  • 既然你是新来的,请不要忘记在解决具体问题时(大多数)帮助(大多数)接受答案.另见http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 (3认同)

Pau*_*ald 0

这是因为你在某个地方有一个 servlet.jar ,你不应该这样做。根据常见问题解答,确保您拥有的唯一 servlet.jar 位于 commons/lib 中。