2009-03-16 5 views
0

Ich habe versucht, ein Servlet, das ich auf dem Glassfish-Anwendungsserver erstellt habe, zu implementieren, und ich habe anscheinend ein kleines Stolperstein geschlagen. Der Code setzt auf den Auto Deploy-Ordner in Ordnung, und wenn es das Folgende geschrieben in die Protokolldatei bereitgestellt ist:404 nach der automatischen Bereitstellung von Servlet an Glassfish

[#|2009-03-16T13:41:29.303+0000|INFO|sun-appserver2.1|javax.enterprise.system.tools.deployment|_ThreadID=23;_ThreadName=Timer-7;|[AutoDeploy] Selecting file /opt/glassfish-2.1.b60e/domains/imageTransformer/autodeploy/image-transformer.war for autodeployment.|#] 

[#|2009-03-16T13:41:29.304+0000|INFO|sun-appserver2.1|javax.enterprise.system.tools.deployment|_ThreadID=23;_ThreadName=Timer-7;|Autoundeploying application :image-transformer|#] 

[#|2009-03-16T13:41:29.360+0000|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=23;_ThreadName=Timer-7;| 
classLoader = WebappClassLoader 
    delegate: true 
    repositories: 
    /WEB-INF/classes/ 
----------> Parent Classloader: 
EJBClassLoader : 
urlSet = [] 
doneCalled = false 
Parent -> [email protected] 

|#] 

[#|2009-03-16T13:41:29.361+0000|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=23;_ThreadName=Timer-7;| 
SharedSecrets.getJavaNetAccess()[email protected]|#] 

[#|2009-03-16T13:41:29.487+0000|INFO|sun-appserver2.1|javax.enterprise.system.tools.deployment|_ThreadID=23;_ThreadName=Timer-7;|[AutoDeploy] Successfully autoundeployed : /opt/glassfish-2.1.b60e/domains/imageTransformer/autodeploy/image-transformer.war.|#] 

[#|2009-03-16T13:41:29.612+0000|INFO|sun-appserver2.1|javax.enterprise.system.tools.deployment|_ThreadID=23;_ThreadName=Timer-7;|deployed with moduleid = image-transformer|#] 

[#|2009-03-16T13:41:29.783+0000|INFO|sun-appserver2.1|javax.enterprise.system.tools.deployment|_ThreadID=23;_ThreadName=Timer-7;|[AutoDeploy] Successfully autodeployed : /opt/glassfish-2.1.b60e/domains/imageTransformer/autodeploy/image-transformer.war.|#] 

Also keine offensichtlichen Fehler, aber danach bekomme ich einen 404 den Zugriff auf den Pfad, der das Servlet sollte gebunden sein an. Gibt es einen weiteren Schritt, den ich durchlaufen muss?

die web.xml in meiner WAR-Datei sieht wie folgt aus:

<web-app> 
    <servlet> 
     <servlet-name>MyServlet</servlet-name> 
     <servlet-class>my.servlet.MyServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>MyServlet</servlet-name> 
     <url-pattern>/hello</url-pattern> 
    </servlet-mapping> 
</web-app> 
+0

Wird diese Anwendung zum ersten Mal bereitgestellt oder wird die Anwendung erneut bereitgestellt? – Mark

+0

Dies ist das erste Mal, dass ich diese Anwendung bereitstelle. Ich habe es noch nie zuvor eingesetzt. – Ceilingfish

Antwort

1

Es gibt ein paar Probleme mit diesem Einsatz waren. Erstens muss eine zweite Konfigurationsdatei im Verzeichnis WEB-INF mit dem Namen sun-web.xml enthalten sein. Sein Inhalt muß von etwas entlang der Linien sein:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 8.1 Servlet 2.4//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_4-1.dtd"> 
<sun-web-app error-url=""> 
    <context-root>/MyServlet </context-root> 
</sun-web-app> 

Es scheint das Potenzial zu haben, viel komplexer als dies (siehe the documentation) zu erhalten.

Zweitens hatte ich den Header für die web.xml Datei zu ändern, so dass sie lasen dementsprechend:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
     version="2.4"> 
    <servlet> 
     <servlet-name>MyServlet</servlet-name> 
     <servlet-class>my.servlet.MyServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>MyServlet</servlet-name> 
     <url-pattern>/hello</url-pattern> 
    </servlet-mapping> 
</web-app> 

Hinweis auf den Header anzeigt, dass diese Servlet-Spezifikation 2.4 ist.

Schließlich scheint es auch, dass Sie nicht direkt auf dieses Servlet zugreifen können; Sie müssen MyServlet/ (oder den servletspezifischen Namen) an den Anfang des Pfads voranstellen. Um auf dieses Servlet zuzugreifen, müssen Sie /MyServlet/hello aufrufen.

0

Ich habe web.xml geändert; Ich habe einfach den vollständigen Pfad des Konfigurationsverzeichnisses für ords hinzugefügt.

<display-name>Oracle Application Express Listener</display-name> 
<context-param> 
    <param-name>config.dir</param-name> 
    <!-- Enter the location where configuration settings should be stored --> 
    <param-value>/odata/apps/ords/config</param-value> 
</context-param> 

es funktioniert, egal ob sun-web.xml da ist oder nicht.

+1

Sorry, wie genau beantwortet das die Frage, für die das OP schon vor 6 Jahren eine Lösung gefunden hat ...? –