Tomcat无法加载Struts 2(异常启动过滤器struts2)

时间:2011-02-02 21:56:09

标签: eclipse exception tomcat filter struts2

我正在使用Eclipse(Java EE / Helios)IDE,struts2和Tomcat 7.0.6。我的网络应用程序昨天工作正常,但一些未知的更改已经杀死它,服务器启动但不再正常运行。在尝试查看.jsp文件时,我收到了以下消息:

  

description请求的资源()   不可用。

(如果它甚至决定提出那个错误)

当我尝试通过Eclipse启动Tomcat服务器并加载“Add.jsp”页面时,在控制台中查看会出现此错误:

...
INFO: Starting service Catalina
Feb 2, 2011 1:38:08 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.6
Feb 2, 2011 1:38:08 PM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter struts2
java.lang.NoClassDefFoundError: javax/servlet/Filter
    at java.lang.ClassLoader.findBootstrapClass(Native Method)
    at java.lang.ClassLoader.findBootstrapClassOrNull(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:1558)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1488)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:252)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:372)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:98)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4382)
    at org.apache.catalina.core.StandardContext$2.call(StandardContext.java:5040)
    at org.apache.catalina.core.StandardContext$2.call(StandardContext.java:5035)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Feb 2, 2011 1:38:08 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error filterStart
Feb 2, 2011 1:38:08 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/StrutsTest] startup failed due to previous errors
Feb 2, 2011 1:38:09 PM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter struts2
java.lang.NoClassDefFoundError: javax/servlet/Filter
    at java.lang.ClassLoader.findBootstrapClass(Native Method)
    at java.lang.ClassLoader.findBootstrapClassOrNull(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
...

现在看来,我之前制作的所有struts2应用程序都存在问题。重启Eclipse和/或我的电脑似乎没有帮助。

这是我的Web.xml的副本(在每个项目中非常相似):

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_9" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Development Environments</display-name>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>Add.jsp</welcome-file>
    </welcome-file-list>

</web-app>

我已经尝试将我的类路径中的某些.jars更新为最新版本(尽管我没想到会这样)。有谁知道可能会出错?如果您知道还需要什么,我很乐意提供更多信息。

5 个答案:

答案 0 :(得分:1)

我必须在apache lib文件夹中添加一个servlet-api的路径。很奇怪,但在那之后它起作用了

答案 1 :(得分:1)

我已经多次使用Tomcat / Eclipse看过这种事情,其中​​基本类似乎突然消失了。我认为Eclipse / Tomcat有时会让自己感到困惑。如果我在启用自动部署的情况下运行服务器并且进行了很多小的更改,似乎会更频繁地发生这种情况。

发生这种情况时,我会关闭服务器。我在我的项目上运行“clean”,然后在tomcat服务器上清理并清理服务器工作目录。当我重新启动服务器时,一切都重新开始工作。

答案 2 :(得分:0)

首先,尝试检查Tomcat服务器日志,看看Tomcat在启动时是否遇到某种类型的致命错误。

该异常表示无法找到servlet API JAR,但是您似乎将JAR放在正确的位置。

您是否正在运行Eclipse中的应用程序?如果是这样,也许Eclipse没有正确启动Tomcat。如果您尝试手动启动Tomcat并在没有Eclipse的情况下部署应用程序,会发生什么?

<强>更新

由于Eclipse启动Tomcat或者手动启动它的行为是一致的,我们可以排除Eclipse作为问题的一部分。

我会尝试以下方法:

  • 尝试部署一个简单的servlet项目甚至JSP - 知道是否运行可能会有所帮助
  • 重新安装Tomcat - 你最近突然提到这件事,Tomcat安装可能发生了一些事情

答案 3 :(得分:0)

至少要运行一个helloworld类型的Struts2应用程序需要这些jar。

  • struts2的核 - *罐
  • XWork的核 - *罐
  • OGNL - *罐
  • 共享记录 - *罐
  • 公地-IO的* .jar
  • 公地琅的* .jar
  • 公地文件上传的* .jar
  • 的freemarker - *罐
  • javaassist - *罐

答案 4 :(得分:0)

确保你有所有的罐子,包括commons-lang3-x.x

你可以通过查看apache日志找到丢失的jar:

引起:java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils 在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711) 在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556) ......还有55个