eclipse - Tomcat java.lang.NoClassDefFoundError : javax/servlet/Filter when trying to publish a Struts2 Dynamic Web App 错误

标签 eclipse macos tomcat struts2

我见过有人问过类似但不完全相同的问题,我看到的建议解决方案对我来说并不适用。

我当前的问题 只要发布了 Struts 2 Web 应用程序,我的 tomcat 就会打印出以下包含异常的日志消息。 我可以为 localhost:8080 加载正确的页面,但不能加载 Web 应用程序,即使 war 文件夹已经放在 Tomcat 的 webapps 文件夹中。

我猜它与 servlet-api.jar 有关,但我已确定该 jar 位于 Tomcat lib 文件夹中,并且我的 Eclipse Tomcat 服务器正在指向该 Tomcat 文件夹。

我使用的是 Mac OSX,我也确信我的环境变量已经到位。通过在终端中输入 export,我可以看到 CATALINA_BASE、CATALINA_HOME、CLASSPATH 等的值。

所以我需要帮助..

服务器消息:

Nov 28, 2013 1:59:57 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: .:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
Nov 28, 2013 1:59:57 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:HellowWorldStruts2' did not find a matching property.
Nov 28, 2013 1:59:58 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Nov 28, 2013 1:59:58 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Nov 28, 2013 1:59:58 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 659 ms
Nov 28, 2013 1:59:58 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Nov 28, 2013 1:59:58 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.47
Nov 28, 2013 2:00:01 PM org.apache.tomcat.websocket.server.WsSci onStartup
INFO: JSR 356 WebSocket (Java WebSocket 1.0) support is not available when running on Java 6. To suppress this message, run Tomcat on Java 7, remove the WebSocket JARs from $CATALINA_HOME/lib or add the WebSocketJARs to the tomcat.util.scan.DefaultJarScanner.jarsToSkip property in $CATALINA_BASE/conf/catalina.properties. Note that the deprecated Tomcat 7 WebSocket API will be available. 
Nov 28, 2013 2:00:01 PM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter struts2
java.lang.NoClassDefFoundError: javax/servlet/Filter
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1617)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4775)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5452)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.ClassNotFoundException: javax.servlet.Filter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 31 more
Nov 28, 2013 2:00:01 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error filterStart
Nov 28, 2013 2:00:01 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/HellowWorldStruts2] startup failed due to previous errors
Nov 28, 2013 2:00:01 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.47/webapps/docs
Nov 28, 2013 2:00:01 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.47/webapps/examples
Nov 28, 2013 2:00:02 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Nov 28, 2013 2:00:02 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Nov 28, 2013 2:00:02 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@37e80c87')
Nov 28, 2013 2:00:02 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.47/webapps/host-manager
Nov 28, 2013 2:00:02 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.47/webapps/manager
Nov 28, 2013 2:00:02 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.47/webapps/ROOT
Nov 28, 2013 2:00:02 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Nov 28, 2013 2:00:02 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Nov 28, 2013 2:00:02 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 4323 ms

解决方案:我发现我将整个 Struts2 jar 库复制到了我的/Library/Java/Extensions 文件夹中。我删除了所有这些 jar ,这个错误就消失了(新错误..)

最佳答案

Tomcat 上的

NoClassDefFoundError 几乎总是 servlet-api.jar 版本冲突的结果——通常在您的 WEB-INF 之间\lib 和 Tomcat 的 lib 文件夹。

通过在构建工具中设置适当的范围(如果适用——对于例如,Maven 中的 provided 或 Gradle 中的 providedRuntimeprovidedCompile

关于eclipse - Tomcat java.lang.NoClassDefFoundError : javax/servlet/Filter when trying to publish a Struts2 Dynamic Web App 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20273309/

相关文章:

java - JOptionPane 降序排列数组*几乎就在那里*

macos - task_for_pid 在 OS X 10.11 上停止工作

swift - 如何仅为一个特定的修改器更改应用动画?

java - Tomcat 间歇性地服务请求

java - 启动时调试 java 应用程序

java - 粘性 Eclipse 错误标记

eclipse - 刷新Eclipse CDT系统包括

macos - OS X - 确定给定 PID 的环境?

java - Servlet作为文件下载,而不是在tomcat上呈现HTML

tomcat - 尝试为远程 Tomcat 调试配置 IntelliJ 时如何忽略 JMX 端口?