Documents
Resources
Learning Center
Upload
Plans & pricing Sign in
Sign Out

les Servlets

VIEWS: 21 PAGES: 17

									A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig




                                                                        Chapitre 4:

                                                                Les servlets
1. Introduction

    1.1.    L’architecture MVC

     De nos jours, les sites internet ne se limitent plus à des contenus statiques, identiques
d’un utilisateur à l’autre. Il devient nécessaire de pouvoir mettre à disposition des internautes
un contenu personnalisé variant en fonction de leurs besoins, leur permettant ainsi d’accéder
à l’information demandée et de pouvoir interagir avec celle-ci et celles des autres utilisateurs.
Les servlets et les JSP constituent la solution offerte par Sun en ce qui concerne la création
d’applications web dynamique.

   Contrairement aux langages de scripts simples où se mélangent couches métier,
présentation et accès aux données, les servlets/JSP permettent une architecture plus claire,
détachée et modulaire en incitant le programmeur à séparer les couches. En effet, pour une
programmation optimisée, une application web doit être fondée sur une architecture MVC :
Model-View-Controller comme le montre la figure 4.1.




                             Fig 4.1. Architecture Model View Controller

                                                                                               1
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig

    La couche présentation (view) correspond aux pages web affichées au niveau du client
(browser, applet…). Ces pages peuvent etre statiques ou dynamiques. Dans le second cas,
elles sont le résultat d’un code exécuté du coté serveur. La programmation de cette couche
peut être réalisée par un serveur d’application J2EE à l’aide des composants suivants :

        •   Les servlets Java
        •   Les Java server Pages
        •   Les JavaBeans

   Certains serveurs d’application sont spécialisés dans le développement de servlet/ JSP
(Tomcat, Resin, Jetty, WebSphere Express…) tandis que d’autres englobent l’ensemble des
spécifications J2EE (JBoss, Jonas, Oracle 9iAS, WebSphere Application Server…).

   Robuste et stable, Tomcat est le serveur standard pour le développement Servlet/ JSP.
Nous l’avons donc adopté pour effectuer la partie pratique de ce chapitre.

    1.2.    Traitement d’une requête Web

        Une requête http de base :

    Une requête http de base est effectuée par un navigateur web auprès d’un serveur web
afin de récupérer le contenu d’une page web. Les différentes étapes du processus sont les
suivantes :

            1.   Le navigateur se connecte au serveur
            2.   Le navigateur envoie sa requête au serveur
            3.   Le serveur cherche la page demandée
            4.   Le serveur commence à envoyer le contenu de la page ou une page d’erreur
            5.   Le navigateur affiche la page au fur et a mesure qu’il la reçoit
            6.   Une fois le transfert terminé, le navigateur ferme la connexion

On remarque que dans le cas d’une requête simple, aucun moteur de servlet n’intervient
pour la génération du résultat.

        Une requête sur serveur Java :

    Dans ce cas, le serveur web doit s’accompagner d’un module supplémentaire qui gérera
les servlets. Celui-ci est tout simplement le conteneur de servlet appelé aussi le moteur de
servlet. Ce module est soit intégré directement dans le serveur web, soit sous forme de
moteur indépendant. Les différentes étapes du processus de traitement de la requête sont
alors :

            1. Le navigateur se connecte au serveur et envoie sa requête
            2. Le serveur détecte que l’on veut un accès à une servlet et transfert donc la
               requête au moteur de servlet
            3. Le moteur vérifié que la servlet est instanciée


                                                                                            2
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig

            4. Si c’est le premier appel, le moteur crée une instance de la servlet et appelle
               le méthode init() de celle-ci
            5. Le moteur appelle ensuite la méthode service() de la servlet. Cette méthode
               reçoit deux objets en paramètres :
                   a. Le premier représentant la requete du client
                   b. Le second représentant la réponse à donner à ce client
            6. Le moteur retourne le résultat généré au serveur web qui la renvoie au client
            7. Le client affiche la page et ferme la connexion.




    1.3.    Cycle de vie d’une servlet

    Le moteur ou le conteneur de servlet n’utilise qu’une seule instance par servlet, ensuite,
chaque requête cliente à pour résultat la création d’un nouveau thread qui est transmis.
Nous allons maintenant examiner comment les servlets sont initialisées, utilisées puis
détruites. Ces étapes s’appellent cycle de vie d’une servlet.

   La méthode init() : est appelée uniquement lors du premier appel à la servlet (soit via un
appel client, soit lors du démarrage du serveur en fonction de la configuration réseau).

    La méthode service() : est appelée pour chaque requete reçue. Cette méthode vérifie le
type de requete et appelle automatiquement soit doGet(), doPost(), doTrace()…

    La méthode destroy() : Le serveur peut demander la suppression de l’instance de la
servlet, soit par demande explicite de l’administrateur, soit parce que la servlet demeure
inactive pendant une trop longue période. Le serveur appelle alors la méthode destroy() de
la servlet afin que celle-ci effectue toutes les opérations de destruction.




                                                                                            3
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig

2. Installation et configuration de Apache Tomcat




    Dans notre application, nous allons utiliser l’Apache Tomcat 5.5. L’installation est rapide
et facile, il suffit d’indiquer le port 80




3. Configuration d’eclipse avec le serveur Apache Tomcat


    Etape 1 : Window – Preferences – Server – Runtime Environments




                                                                                             4
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig




    Etape 2 : Add




                                                  5
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig

   Etape 3 : Next – Browse : puis vous indiquez le chemin du rosier d’installation d’Apache
Tomcat.




    Etape 4 : Test du fonctionnement du serveur




                                                                                         6
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig




    Sélection du serveur et test comme le montre la figure suivante :




    Si tout se passe bien, vous aurez




    Il se peut que le serveur Apache Tomcat ait quelques problèmes dans l’utilisation des
ports, dans ce cas, vous pouvez utiliser des ports différents en incluant les modifications
nécessaires dans le fichier de configuration.
                                                                                              7
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig

4. Création d’un premier servlet

    Etape 1 : New – Dynamic web project




    Etape 2 : Next puis associer le projet à une perspective J2EE




                                                                    8
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig

   La création du projet va générer un ensemble de dossiers et de fichiers dont le descripteur de
déploiement web.xml.




    Etape 3 : Création d’un nouveau servlet avec new – servlet




                                                                                                    9
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig




    Le servlet généré contient alors le code suivant :

package com.isamm.mesServlets;

import   java.io.IOException;
import   javax.servlet.ServletException;
import   javax.servlet.http.HttpServlet;
import   javax.servlet.http.HttpServletRequest;
import   javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet {

     private static final long serialVersionUID = 1L;

     public HelloWorld() {
         super();
     }

    protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
            super.doGet(request, response);
      }

      protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            super.doPost(request, response);
      }

}


                                                                           10
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig

   La lecture des données se fait via l’instance de l’objet HttpServletRequest passé en
paramètre des méthodes doGet(), doPost()…

   La réponse à la requête se fait via l’instance de l’objet HttpServletResponse passé en
paramètre des méthodes doGet(), doPost()…

    Changer le contenu de la servlet afin qu’elle affiche le message HelloWorld sachant que
l’écriture des données de type texte dans la réponse se fait par l’objet PrintWriter que l’on
peut récupérer par la méthode getWriter() :

protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
        PrintWriter theWriter = response.getWriter();
        theWriter.println("HelloWorld");

     }

    .L’exécution sur le serveur de l’apache (Run on server) génère alors :




5. Création d’un second servlet

     Créer une nouvelle servlet HelloPerson qui devra afficher un contenu selon le nom et
prénom de la personne saisis dans l’url. Pour ce faire modifier la méthode doGet() en
utilisant l’instance request de l’objet HttpServletRequest .


                                                                                          11
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig

protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
            String name = request.getParameter("name");
            String firstName = request.getParameter("firstName");
            PrintWriter theWriter = response.getWriter();
            theWriter.println("This is the doGet Method:");
            theWriter.println("Hello "+firstName+" "+name+"!");

        }

    .L’exécution sur le serveur de l’apache (Run on server) avec l’url suivante :

http://localhost:8082/TPServlet/HelloPerson?firstName=Amin&name=Zribi

génère le résultat suivant :




6. Création d’un servlet utilisant les données d’un formulaire

    Etape 1 : Création d’un formulaire

   Créer une page html appelée input.html. Celle-ci permettra à l’utilisateur de saisir son
nom ainsi que son prénom à travers un formulaire. Le code est alors le suivant :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

                                                                                        12
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Input HTML</title>
</head>

<body>

<form method="post" action="HelloPerson">
     Name: <input type="text" name="name"><br>
     Fist Name: <input type="text" name="firstName"><br>
     <input type="submit" value="send">
</form>

</body>

</html>

    Le formulaire crée contient alors deux champs Name et First Name qui enverront les
résultats vers les champs name et fistName dans la méthode doPost() de la servlet
HelloPerson. Il faut alors changer la méthode doPost() afin qu’elle affiche la page selon les
données saisies par le formulaire. Il suffit alors d’inclure les mêmes changement que celles
opérées sur doGet() dans la section précédente :

protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
            String name = request.getParameter("name");
            String firstName = request.getParameter("firstName");
            PrintWriter theWriter = response.getWriter();
            theWriter.println("This is the doPost Method:");
            theWriter.println("Hello "+firstName+" "+name+"!");
      }

    L’exécution sur le serveur du fichier Input.html résulte en :




    Et la validation avec send exécute la servlet et retourne :




                                                                                          13
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig




7. Récupération des paramètres de contexte

    Dans le fichier de déploiement, ajouter le code suivant :

      <context-param>
      <param-name>dbURL</param-name>
      <param-value>jdbc:mysql://localhost/</param-value>
      </context-param>

     <context-param>
      <param-name>login</param-name>
     <param-value>root</param-value>
     </context-param>

     <context-param>
     <param-name>password</param-name>
     <param-value></param-value>
     </context-param>

     <context-param>
     <param-name>dbName</param-name>
     <param-value>compta</param-value>
     </context-param>

    La récupération d’un paramètre du contexte se fait de la manière suivante :

ServletContext servletContext = this.getServletContext();
String databaseName = servletContext.getInitParameter("dbName");

   Mais, ceci suppose la connaissance des noms des paramètres. Pour connaître la liste
des noms des paramètres, il faut utiliser la méthode suivante.

Enumeration initParameterNames = servletContext.getInitParameterNames();

    L’objet initParameterNames est une énumération contenant les noms des paramètres.
Ainsi, il devient possible d’extraire les valeurs des paramètre de contexte sans connaître
leurs noms à priori.


                                                                                       14
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig

    Le parcours d’une énumération se fait comme dans l’exemple qui suit :

while(initParameterNames.hasMoreElements()){
      String parameterName = initParameterNames.nextElement().toString();
      theWriter.println(parameterName+" : " +
servletContext.getInitParameter(parameterName)+ "<br>");

                }

      Créer la servlet ExtractContextParameters qui a comme tache principale l’affichage
des paramètres du contexte ainsi que de leurs valeurs en utilisant les 2 méthodes décrites
auparavant. Le résultat de l’exécution sera alors le suivant :




8. Applications

        Dans le descripteur de déploiement ajouter le paramètre d’initialisation « langue »
pour la servlet HelloWorld avec le code suivant :

<init-param>
  <param-name>langue</param-name>
  <param-value>Anglais</param-value>
</init-param>

        En faisant l’analogie avec la section précédente, modifier la servlet HelloWorld afin
qu’elle affiche la page suivante :




                                                                                          15
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig




       Créer une page html appelée « welcome.html » et modifier le descripteur de
déploiement afin qu’elle soit la page d’accueil avec :

<welcome-file-list>
      <welcome-file>Welcome.html</welcome-file>
</welcome-file-list>


Créer dans la page Welcome.html des liens vers les servlets existants dans la page
d’accueil :.
<br>
<a href="HelloWorld">hello world</a>
<br>
<a href="Input.html">input name</a>
<br>
<a href="ExtractContextParameters">context parameters</a>
<br>


Le résultat de l’exécution du projet va générer :




                                                                               16
A. Zribi, H. Maatallah, M. R. Haddad, A. Maatig

9. Exercice (suite du TP)

    Créer une page d’identification « identification.html » comportant un formulaire pour la
saisie d’un mot de passe et d’un login. Ensuite, créer un servlet appelé identification qui
vérifie ces données saisies par l’utilisateur par rapport aux paramètres de contexte login et
password.

Si le couple login mot de passe est correct, l’utilisateur est redirigé vers le servlet
ExtractContextParameters. Sinon, ces informations sont re-demandées dans la page
d’identification.

Le passage d’une servlet à une autre se fait pas la méthode sendRedirect(String location)
prenant comme argument l’url du servlet appelé.




                                                                                          17

								
To top