在使用Struts 2框架的MyEclipse IDE中使用Tomcat服务器时,我遇到了一个反复出现的问题。 我正在运行我的程序作为服务器应用程序,当它运行时,默认的index.jsp文件将成功打开,但应用程序的其他任何过去都不会起作用。 当我尝试加载任何我的.do页面时,我收到以下错误: 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
有什么建议吗?
答案 0 :(得分:2)
我认为没有理由在类路径中添加javax.servlet-3.0.1.jar
。因为您正在使用Eclipse来构建/运行您的应用程序,所以当您将tomcat或任何服务器作为运行时环境添加到您的项目这些lib依赖项将自动添加到class-path.Simple中从项目的lib文件夹中删除此jar。此外还有其他原因。
Servlet Spec 2.3,第9.7.2节中提到的Servlet容器(例如Tomcat)将提供J2EE规范的实现类。你的WEB-INF / lib目录中的j2ee.jar(在我们的例子中是servlet-api.jar?)试图提供相同的信息。具有特定于应用程序的实现是规范2.3和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>