2010-06-03 3 views
1

Hier, j'ai créé une simple servlet d'image et tenté de la déployer. Je reçois une erreur sur le démarrage de JBoss, puis d'autres erreurs sur l'appel de la servlet.Problème lors du déploiement de servlets dans JBoss 5.1 sur eclipse

J'ai passé environ 8 heures hier à chercher des réponses sur le Web et à essayer différents scénarios. J'ai fini par aggraver mes problèmes avec JBoss, puis je les ai corrigés, mais je n'ai jamais réussi à faire fonctionner le servlet.

Le servlet est com.controller.MyImageServlet, et ressemble à ceci:

package com.controller; 

import javax.servlet.http.*; 

/** 
* Servlet implementation class MyImageServlet 
*/ 
public class MyImageServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public MyImageServlet() { 
     super(); 
    } 

    // Process the HTTP Get request 
     public void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
      /* ... */ 
    } 
} 

Les étiquettes que je l'ai ajouté à web.xml ressemble à ceci:

<servlet> 
    <servlet-name>ImageServlet</servlet-name> 
    <servlet-class>com.controller.MyImageServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>ImageServlet</servlet-name> 
    <url-pattern>/CERTIMAGE/*</url-pattern> 
    </servlet-mapping> 

Au démarrage du serveur, c'est la seule indication dans le journal que quelque chose ne va pas:

01:59:25,328 WARN [JAXWSDeployerHookPreJSE] Cannot load servlet class: com.controller.MyImageServlet 

Lorsque j'essaie le modèle d'URL (http://localhost:9980/CERTIMAGE/1), je reçois la trace de pile suivante dans le journal (et dans le navigateur):

01:59:39,640 INFO [[/]] Marking servlet ImageServlet as unavailable 
01:59:39,640 ERROR [[ImageServlet]] Allocate exception for servlet ImageServlet 
java.lang.ClassNotFoundException: com.controller.MyImageServlet 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
    at org.jboss.web.tomcat.service.TomcatInjectionContainer.newInstance(TomcatInjectionContainer.java:262) 
    at org.jboss.web.tomcat.service.TomcatInjectionContainer.newInstance(TomcatInjectionContainer.java:256) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1006) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:777) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) 
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) 
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) 
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
    at java.lang.Thread.run(Thread.java:619) 

Si je tente à nouveau le modèle d'URL, je reçois le message suivant dans le journal:

09:33:32,390 INFO [[ImageServlet]] Servlet ImageServlet is currently unavailable 

J'ai vérifié que MyImageServlet.class est dans le WAR à WEB-INF/classes/com/controller. En fait, j'ai même ajouté du code à l'une de mes JSP pour tenter d'instancier le servlet et appeler la méthode doGet. Cela fonctionne réellement et renvoie les séquences de débogage correctes au journal indiquant que le constructeur de Servlet et les méthodes doGet ont été appelées.

J'ai également essayé de suivre quelques instructions pour créer/déployer une servlet HelloWorld très simple, et cela a exactement le même problème. Notez que web.xml contenait déjà une servlet mise en place par JBoss: org.jboss.web.tomcat.service.StatusServlet - ce servlet ne donne aucune erreur dans le journal. À titre d'expérience, j'ai supprimé ".web" de ce chemin et j'ai fini par obtenir exactement la même erreur que celle que j'obtiens sur ma servlet. Il semblerait donc que JBoss ne soit pas capable de localiser ma servlet en fonction du chemin spécifié. Juste pour les coups de pied, j'ai essayé toutes sortes d'autres chemins, comme simplement MyImageServlet, controller.MyImageServlet, et plus. De plus, le servlet s'appelait à l'origine ImageServlet, mais j'ai tenté de le changer en pensant qu'il y avait peut-être un conflit avec un ImageServlet existant. Dans tous les cas, le comportement est le même. Après toutes mes recherches d'hier, je dirais que cela semble être un problème avec le conteneur de servlet JBoss, et j'ai aussi appris que JBoss 5.1.0.GA devrait être livré avec un conteneur de servlet tomcat. J'ai installé JBoss sur mon PC (Windows XP) il y a moins de 2 mois (depuis jboss.org) et je l'ai utilisé à peu près tel quel. Notez que je cours sur JDK 1.6, j'ai donc utilisé la version d'installation de jboss-jdk6. Je cours sur Windows, mais je déploie également sur un serveur dédié virtuel Linux. J'ai déployé la version actuelle de mon programme, y compris la servlet sur la machine Linux, mais j'ai les mêmes erreurs. Je suis réticent à essayer simplement de réinstaller JBoss, car il est difficile de blâmer l'installation de JBoss quand j'obtiens les mêmes erreurs sur deux installations complètement différentes. Je suis un peu méfiant du conteneur de servlet Tomcat fourni, car en utilisant Eclipse, je n'ai pas pu trouver d'indication qu'il y a un tomcat dans JBoss. J'ai localisé servlet-api.jar dans le répertoire commun/lib de JBoss. C'est sur le chemin de compilation de l'éclipse.

Une remarque peut-être utile: J'avais déjà utilisé un serveur tomcat autonome pour d'autres projets utilisant la même éclipse, donc c'est peut-être une sorte de problème d'éclipse? Mais, comme je l'ai dit, je reçois les mêmes erreurs quand je me déploie sur le serveur Linux, et ce processus de déploiement implique simplement des fichiers ftp sur le serveur et ensuite les mettre dans le paquet war déployé et redémarrer JBoss.

Merci pour toute aide que vous pouvez fournir.

+0

* "J'ai vérifié que MyImageServlet.class se trouve dans le fichier WAR sur WEB-INF/classes/com/controller/images." * Pouvez-vous lire cette déclaration? Le '/ images' est en conflit avec la déclaration du paquetage ... – BalusC

+0

Désolé, les" images "sont des fautes de frappe. Je vais corriger cela dans l'énoncé du problème. –

Répondre

1

Après avoir passé les deux dernières semaines portant sur des questions similaires, je maintenant regarder en arrière et suggérer à mon passé moi que j'essaie une des opérations suivantes:

  1. Assurez-vous que le dossier source est spécifié dans la eclipse Deployment Assemblage (cliquez avec le bouton droit sur le projet, sélectionnez Propriétés, puis cliquez sur Déploiement).

  2. Assurez-vous que le dossier source est inclus dans le chemin de classe du serveur (cliquez deux fois sur le serveur, cliquez sur « Configuration de lancement Ouvrir », puis sélectionnez l'onglet ClassPath).

Ce projet a toutefois disparu depuis longtemps, je ne peux donc pas le dire avec certitude.

Questions connexes