【问题标题】:HTTP Status 404 - The requested resource is not availableHTTP 状态 404 - 请求的资源不可用
【发布时间】:2012-04-12 17:54:24
【问题描述】:

在 MyEclipse IDE 中使用 Tomcat 服务器和 Struts 2 框架时,我遇到了一个反复出现的问题。 我将我的程序作为服务器应用程序运行,当它运行时,默认的 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

有什么建议吗?

【问题讨论】:

    标签: java tomcat struts2 myeclipse


    【解决方案1】:

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

    1. javax.servlet-3.0.1.jar 已被添加为运行时库(在 .WAR 中)——它仅在构建时需要。
    2. 从 WEB-INF/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>
    

    【讨论】:

    • 我不太清楚你的意思。我尝试从控制台指定的位置手动删除该文件,但是当您运行该程序时,该文件会再次自动创建。我在这里做错了什么?
    • @Saladin 你将它从 myeclipse 中的 java 构建路径中删除。
    • @Umesh 添加了 maven 示例,因为它解决了具体问题,并且只是您已经说过的实现细节。
    猜你喜欢
    • 2017-03-23
    • 2012-01-21
    • 2017-12-21
    • 1970-01-01
    • 2015-05-26
    • 2018-04-13
    • 2011-12-09
    • 1970-01-01
    相关资源
    最近更新 更多