Question

J'ai essayé de déployer une servlet que j'ai créée sur le serveur d'applications Glassfish, et il semble que je sois tombé sur une pierre d'achoppement. Le code se déploie correctement dans le dossier de déploiement automatique. Une fois déployé, les éléments suivants sont écrits dans le fichier journal:

[#|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 -> java.net.URLClassLoader@39cf701c

|#]

[#|2009-03-16T13:41:29.361+0000|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=23;_ThreadName=Timer-7;|
SharedSecrets.getJavaNetAccess()=java.net.URLClassLoader$7@5e7408d9|#]

[#|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.|#]

Donc, pas d’erreurs évidentes, mais après cela, j’obtiens un 404 en accédant au chemin auquel le servlet devrait être lié. Dois-je franchir une autre étape?

le fichier web.xml dans mon fichier WAR ressemble à ceci:

<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>
Était-ce utile?

La solution

Il y avait quelques problèmes avec ce déploiement. Tout d'abord, vous devez inclure un deuxième fichier de configuration dans le répertoire WEB-INF , nommé sun-web.xml . Son contenu doit ressembler à:

<?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>

Il semble avoir le potentiel pour devenir beaucoup plus complexe que cela (voir la documentation ).

Deuxièmement, je devais modifier l'en-tête du fichier web.xml afin qu'il soit lu en conséquence:

<?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>

Notez les en-têtes indiquant qu'il s'agit de la spécification de servlet 2.4.

Enfin, il semble également que vous ne puissiez pas accéder directement à cette servlet. vous devez ajouter MyServlet / (ou le nom spécifique du servlet) au début du chemin. Pour accéder à ce servlet, vous devez donc vous rendre sur / MyServlet / hello .

Autres conseils

J'ai modifié le fichier web.xml; J'ai simplement ajouté le chemin complet du répertoire config pour ords.

<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>

cela fonctionne que sun-web.xml soit présent ou non.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top