Looking for Computer Science  & Information Technology online courses ?
Check my new web site: https://www.yesik.it !

Cet article pour débutant vous montre comment compiler et déployer une servlet sous JBoss AS 5.

Une servlet?

Pour commencer, un mot sur les servlets: il s'agit d'objets Java chargés de répondre à des requêtes Web. Ces objets vivent dans le contexte d'un container de servlet. Il en existe différents, mais celui livré avec JBoss est Tomcat.

Le container de servlet est responsable du cycle de vie de la servlet. Il a aussi pour rôle de lui transmettre les requêtes web qui lui sont destinées.

En pratique, la création d'une servlet est moins compliquée qu'on pourrait le redouter! En effet, puisque le container de servlet prend en charge bon nombre de problèmes techniques, l'auteur de la servlet peut se concentrer sur la tâche à réaliser. La contrepartie est que la servlet doit respecter un certain nombre de conventions pour être correctement gérée par son container.

Concrètement, pour créer une servlet, vous aurez besoin d'effectuer les opérations suivantes:

  1. Mettre en oeuvre une classe Java dérivée de javax.servlet.http.HttpServlet et surcharger les méthodes qui vous intéressent;
  2. Ecrire un fichier de configuration XML web.xml qui donnera au container les informations essentielles pour gérer votre servlet;
  3. et enfin packager le(s) fichier(s) Java compilé(s) et le fichier XML en respectant une arborescence bien précise.

L'arborescence

Comme souvent dans le monde JEE (Java Enterprise Edition) , un point clé du développement est de respecter l'organisation imposée par les spécifications pour le JAR (Java ARchive – Un format d'archive utilisé dans le monde Java pour regrouper des fichiers (classes compilées, méta-données, etc.).) final. Nous allons donc commencer ici du bon pied, en organisant l'arborescence de notre projet en conséquence:

sh$ mkdir HelloServlet
sh$ cd HelloServlet
sh$ mkdir -p src/fr/chicoree/sample # Création de l'arborescence source
sh$ touch src/fr/chicoree/sample/HelloServlet.java
sh$ mkdir -p build/WEB-INF/classes  # Création de l'arborescence finale de la servlet
sh$ touch build/WEB-INF/web.xml

Bien sûr, pour l'instant, tous les fichiers sont vides. Commençons donc par le code de la servlet à saisir dans le fichier src/fr/chicoree/sample/HelloServlet.java:

package fr.chicoree.sample;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class HelloServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,
			HttpServletResponse response)
	    throws ServletException, IOException
    {
	PrintWriter out = response.getWriter();
	out.println("<html><body><h1>Hello</h1></body></html>");
	out.close();
    }
}

Comme vous le voyez, écrire une servlet, c'est finalement juste écrire une classe dérivée de HttpServlet et surcharger les méthodes qui vous intéressent. Ici, doGet pour répondre à une requête HTTP GET.

Passons maintenant au descripteur de servlet – le fichier build/WEB-INF/web.xml. Le rôle de ce fichier est d'indiquer au container de servlet le nom de la classe Java qui correspond à votre servlet. Par ailleurs, il indique aussi l'URL à laquelle la servlet sera accessible:

<web-app version="2.5">
    <servlet>
	<servlet-name>Hello Servlet</servlet-name>
	<servlet-class>fr.chicoree.sample.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
	<servlet-name>Hello Servlet</servlet-name>
	<url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

Reste à compiler notre servlet. Or, comme la classe javax.servlet.http.HttpServlet ne fait pas partie de Java SE, il est impératif que le compilateur ait accès au JAR correspondant. Celui-ci devrait être fourni avec votre container de servlet.

Enfin, il faut aussi préciser que les fichiers compilés devront être placés dans le dossier build/WEB_INF/classes. D'où une ligne de commande peut-être plus longue que celles auxquelles vous êtes habitués:

sh$ javac -classpath ${JBOSS_HOME}/common/lib/servlet-api.jar \
          -d build/WEB-INF/classes                            \
          src/fr/chicoree/sample/*.java

Et c'est terminé! Le répertoire build contient l'arborescence complète de l'archive de notre servlet. Autrement dit son code compilé (fichier .class) et son descripteur (web.xml). A ce stade, JBoss vous autorise à déployer votre servlet sur le serveur simplement en copiant le dossier dans ${JBOSS_HOME}/server/default/deploy:

sh$ cp -RT build ${JBOSS_HOME}/server/default/deploy/HelloServlet.war

Et après quelques secondes, vous devriez pouvoir vous connecter à votre servlet via l'adresse http://localhost:8080/HelloServlet/hello.

Remarque:

Accessoirement, vous pouvez aussi créer un WAR (Web ARchive – Archive web.
Une archive Java contenant une application web.)
– et copier cette archive dans le répertoire de déploiement à la place du dossier explosé:

# Au cas ou vous auriez déjà déployé le répertoire, faire le ménage:
sh$ rm -rf ${JBOSS_HOME}/server/default/deploy/HelloServlet.war

# Créer l'archive WAR et la copier dans le répertoire de déploiement:
sh$ jar cf HelloServlet.jar -C build WEB-INF
sh$ cp -T HelloServlet.jar  ${JBOSS_HOME}/server/default/deploy/HelloServlet.war

Ressources