2012-04-12 5 views
2

Ich stehe bei der Verwendung des Tomcat-Servers in der MyEclipse-IDE mit dem Struts 2-Framework auf ein wiederkehrendes Problem. Ich führe mein Programm als eine Server-Anwendung aus und wenn es ausgeführt wird, wird die Standard index.jsp-Datei erfolgreich geöffnet, aber keine der anderen früheren Versionen der Anwendung wird funktionieren. Beim Versuch, eine meiner meine .do-Seiten zu laden, erhalte ich den folgenden Fehler: HTTP-Status 404: Die angeforderte Ressource .... ist nicht verfügbar. Als ich diesen Fehler zuvor hatte, habe ich gerade den Server neu gestartet und alles war in Ordnung, aber ich habe jetzt nicht das gleiche Glück.HTTP-Status 404 - Die angeforderte Ressource ist nicht verfügbar

Hier ist das Protokoll von der Konsole, wenn ich auf run trete.

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 

Irgendwelche Vorschläge?

Antwort

2

Ich sehe keinen Grund, javax.servlet-3.0.1.jar in Ihrem Klassenpfad hinzuzufügen. Da Sie Eclipse verwenden, um Ihre Anwendung zu erstellen/auszuführen, also wenn Sie tomcat oder einen beliebigen Server als Laufzeitumgebung zu Ihrem Projekt hinzufügen, diese lib Abhängigkeiten werden automatisch zum Klassenpfad hinzugefügt. Entfernen Sie einfach diesen Jar aus dem lib-Ordner Ihres Projekts. Das kann auch andere Gründe haben.

  1. javax.servlet-3.0.1.jar wurde als Laufzeitbibliothek (im .WAR) hinzugefügt - und nur während der Build-Zeit benötigt.
  2. Entfernen Sie das JAR von WEB-INF/lib, und aktualisieren Sie Ihr Buildskript, um auf den neuen Speicherort zu verweisen.

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.

Kurz den javax.servlet-3.0.1.jar aus Ihrem lib Ordner entfernen, und der Behälter kümmern liefert diese Abhängigkeiten für Sie lassen.

eine Abhängigkeit zu erklären, die durch den Behälter mit Maven versehen ist, stellen Sie den Umfang „zur Verfügung gestellt“ hier ist ein Beispiel dafür, wie ein Eintrag in Ihrem pom.xml aussehen sollte:

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

ich nicht ganz bin sicher, was du meinst. Ich habe versucht, die Datei manuell von dem Speicherort zu löschen, den die Konsole angibt, aber wenn Sie das Programm ausführen, wird die Datei automatisch erneut erstellt. Was mache ich hier falsch? – Saladin

+1

@Saladin Sie entfernen es aus dem Java-Build-Pfad in MyEclipse. –

+1

@Umesh Das Maven-Beispiel wurde hinzugefügt, da es sich auf das Spezifische bezieht und nur ein Implementierungsdetail für das ist, was Sie bereits gesagt haben. – Quaternion