2012-04-12 3567 views
2

我在MyEclipse IDE中使用Tomcat服务器时遇到了一个反复出现的问题,并带有Struts 2框架。 我正在将我的程序作为服务器应用程序来运行,当它运行时,默认的index.jsp文件将成功打开,但其他应用程序的其他任何应用程序都不会运行。 当试图加载我的任何.do页面时,出现以下错误: HTTP状态404:请求的资源....不可用。 当我以前遇到这个错误时,我刚刚重新启动服务器,一切都很好,但我现在没有同样的运气。HTTP状态404 - 请求的资源不可用

下面是我在运行时从控制台登录的日志。

Apr 12, 2012 10:49:35 AM org.apache.catalina.core.AprLifecycleListener init 
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\bin;C:\Program Files\MyEclipse\Common\plugins\com.genuitec.eclipse.easie.tomcat.myeclipse_9.0.0.me201109141806\tomcat\bin 
Apr 12, 2012 10:49:35 AM org.apache.coyote.http11.Http11Protocol init 
INFO: Initializing Coyote HTTP/1.1 on http-8080 
Apr 12, 2012 10:49:35 AM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 285 ms 
Apr 12, 2012 10:49:35 AM org.apache.catalina.core.StandardService start 
INFO: Starting service Catalina 
Apr 12, 2012 10:49:35 AM org.apache.catalina.core.StandardEngine start 
INFO: Starting Servlet Engine: Apache Tomcat/6.0.13 
Apr 12, 2012 10:49:35 AM org.apache.catalina.loader.WebappClassLoader validateJarFile 
INFO: validateJarFile(C:\Documents and Settings\username\My Documents\Workspaces\.metadata\.me_tcat\webapps\project-name\WEB-INF\lib\javax.servlet-3.0.1.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class 
log4j:WARN No appenders could be found for logger (com.opensymphony.xwork2.config.providers.XmlConfigurationProvider). 
log4j:WARN Please initialize the log4j system properly. 
Apr 12, 2012 10:49:37 AM org.apache.coyote.http11.Http11Protocol start 
INFO: Starting Coyote HTTP/1.1 on http-8080 
Apr 12, 2012 10:49:37 AM org.apache.jk.common.ChannelSocket init 
INFO: JK: ajp13 listening on /0.0.0.0:8009 
Apr 12, 2012 10:49:37 AM org.apache.jk.server.JkMain start 
INFO: Jk running ID=0 time=0/16 config=null 
Apr 12, 2012 10:49:37 AM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 1720 ms 

有什么建议吗?

回答

2

我看不出有什么理由在您的类路径中添加javax.servlet-3.0.1.jar。由于您使用Eclipse来构建/运行应用程序,所以当您将tomcat或任何服务器作为运行时env添加到项目时,这些库依赖关系将自动添加到类路径。简单地从您的项目的lib文件夹中删除此jar。对此也可能有其他原因。

  1. javax.servlet-3.0.1.jar已作为运行时库(在.WAR中)添加 - 并且只在编译期间需要它。
  2. 从WEB-INF/lib中删除jar,并更新您的构建脚本以指向新的位置。

the Servlet Spec 2.3, section 9.7.2 being referred to says that the Servlet Container (E.g. Tomcat) will supply the implementation class of the J2EE spec. The j2ee.jar (servlet-api.jar in our case?) in your WEB-INF/lib directory is trying to supply the same info. Having application specific implementations is a stability and security problem that is disallowed by the spec 2.3 and by Tomcat.

总之从lib文件夹中删除的javax.servlet-3.0.1.jar而让容器采取你提供这些依赖护理。

要声明这是由与Maven容器提供一个依赖范围设置为“提供”这里是在你的pom.xml的条目应该如何看一个例子:

<dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>6.0</version> 
     <scope>provided</scope> 
    </dependency> 
+0

我不是很确定你的意思。我尝试从控制台指定的位置手动删除文件,但是当您运行程序时,文件会自动再次创建。我在这里做错了什么? – Saladin 2012-04-12 18:40:18

+1

@Saladin你从myeclipse中的java构建路径中删除它。 – 2012-04-12 18:48:29

+1

@Umesh添加了maven示例,因为它解决了具体问题,只是您已经提到的实现细节。 – Quaternion 2012-04-12 21:46:54