Статус HTTP 404 — запрошенный ресурс недоступен

Я сталкиваюсь с повторяющейся проблемой при использовании сервера Tomcat в MyEclipse IDE с платформой 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

Какие-либо предложения?


person Saladin    schedule 12.04.2012    source источник


Ответы (1)


Я не вижу причин добавлять javax.servlet-3.0.1.jar в ваш путь к классам. Поскольку вы используете Eclipse для сборки/запуска своего приложения, поэтому, когда вы добавите tomcat или любой сервер в качестве среды выполнения в свой проект, эти зависимости lib будут автоматически добавлен в путь к классу. Просто удалите эту банку из папки lib вашего проекта. Для этого могут быть и другие причины.

  1. javax.servlet-3.0.1.jar был добавлен в качестве библиотеки времени выполнения (в .WAR) и был нужен только во время сборки.
  2. Удалите банку из WEB-INF/lib и обновите скрипт сборки, чтобы он указывал на новое местоположение.

в спецификации сервлета 2.3, в разделе 9.7.2 говорится, что контейнер сервлета (например, Tomcat) будет предоставлять класс реализации спецификации J2EE. J2ee.jar (в нашем случае servlet-api.jar?) в вашем каталоге WEB-INF/lib пытается предоставить ту же информацию. Наличие специфичных для приложения реализаций является проблемой стабильности и безопасности, которая запрещена спецификацией 2.3 и Tomcat.

Короче говоря, удалите javax.servlet-3.0.1.jar из вашей папки lib и позвольте контейнеру позаботиться о предоставлении вам этих зависимостей.

Чтобы объявить зависимость, предоставляемую контейнером, с помощью maven установите для области действия значение «предоставлено», вот пример того, как должна выглядеть запись в вашем pom.xml:

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
person Umesh Awasthi    schedule 12.04.2012
comment
Я не совсем уверен, что вы имеете в виду. Я пытался вручную удалить файл из места, указанного в консоли, но затем при запуске программы файл снова автоматически создается. Что я здесь делаю неправильно? - person Saladin; 12.04.2012
comment
@Saladin, вы удалите его из пути сборки Java в myeclipse. - person MohanaRao SV; 12.04.2012
comment
@Umesh Добавлен пример maven, потому что он касается конкретного и является просто деталью реализации того, что вы уже сказали. - person Quaternion; 13.04.2012