2011-02-02 113 views
1

我正在使用Eclipse(Java EE/Helios)IDE,struts2和Tomcat 7.0.6。我的web应用程序昨天工作正常,但是一些未知的更改已将其杀死,服务器启动但不再正常运行。试图查看.jsp文件时,我收到以下消息:Tomcat无法加载Struts 2(异常启动过滤器struts2)

说明请求的资源() 不可用。

(如果它甚至决定忍受的错误的话)

控制台中的样子给我这个错误,当我尝试启动通过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> 

我试着在我的类路径中的最新版本更新某些.jar文件(虽然我没没有期望的工作)。有谁知道什么可能会出错?如果您知道还需要什么,我很乐意提供更多信息。

+0

它看起来就像你错过了`servlet-api` JAR。这应该与Tomcat打包在一起。 – 2011-02-02 22:26:24

+1

我在C:\ apache-tomcat-7.0.6 \ lib目录中有'servlet-api.jar',以及其他.jar文件(catalina.jar,jasper.jar,tomcat-api.jar,catalina-ant .jar等) 把servlet-api.jar放在不同的目录下?或者我应该以某种方式包括它? – Tasyne 2011-02-02 23:03:05

回答

0

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

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

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

更新

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

我会尝试以下方法:

  • 尝试部署一个简单的servlet项目甚至JSP —它可能有助于知道什么运行
  • 重新安装Tomcat —你提到这事突然最近,Tomcat安装可能发生了一些事情
+0

我没有看到日志中的致命错误,所以我将所有日志移动到旧/目录,然后使用startup.bat手动启动Tomcat(我在Windows上,而且我一直在使用Eclipse)。然后,我使用Web浏览器浏览到:http:// localhost:8080/DevEnvironments/Add.jsp,它表示“description请求的资源(/DevEnvironments/Add.jsp)不可用。” (我不确定部署应用程序时是否需要其他步骤)。新创建的日志文件没有错误,但我仍然粘贴它们:http://pastebin.com/K5mk0HLe – Tasyne 2011-02-03 00:51:58

1

我不得不在apache lib文件夹中添加servlet-api的路径。奇怪,但之后,它的工作

0

至少运行一个helloworld类Struts2应用程序将需要这些罐子。

  • Struts2的核心 - *罐子
  • XWork的-芯 - *。罐子
  • OGNL - *罐子
  • 共享记录 - *。罐子
  • 公地IO的* .jar
  • 公地郎的* .jar
  • 公地文件上传的* .jar
  • 的freemarker - *罐子
  • javaassist - *。JAR
1

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

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

0

请确保您有通过查找Apache日志像所有的罐子包括公地lang3-XX

你可以找到丢失的罐子:

产生的原因:抛出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更多