Mise en oeuvre des Servlets et des JSP

Quelques liens utiles

Apache Tomcat :

Servlets et technologie Java Server Page :

Le conteneur WEB Tomcat d'Apache (5m)

Eclipse JEE et les applications WEB (20m)

Nous allons utiliser le plugin WTP qui est intégré par défaut dans Eclipse pour JEE. Pour ce faire, suivez ces étapes les unes après les autres :

  1. Lancer la version JEE de Eclipse.
  2. Dans le menu « Windows/Preferences » choissisez l'onglet « Server / Runtime Environments » et ajoutez un nouveau Runtime de type Apache Tomcat 9.0.
  3. Repérez la vue Server (menu « Windows / Show view ») et créez un nouveau serveur (avec le menu contextuel dans la vue Server) basé sur le Runtime Tomcat 9 précédemment créé.
  4. Créez un nouveau projet de type « Web / Dynamic Web project » :
    • Écran 1 : Fixez le nom myapp, choisissez le Target Runtime Apache Tomcat 9 et la version 4.0 du module.
    • Écran 2 : Configuration du répertoire source (rien à faire).
    • Écran 3 : Configuration du contexte et du répertoire contenant les ressources WEB (rien à faire). À ce stade, il faut choisir l'option « Generate web.xml » afin qu'eclipse prépare automatiquement le fichier de configuration.
  5. Convertissez votre projet à Maven : Sélectionnez votre projet / Bouton-droit / Configure / Convert to Maven Project. Vous devez à cette étape donner une numéro de version à votre projet. Laissez les valeurs par défaut.
  6. Ajoutez les dépendances ci-dessous dans le fichier pom.xml :
    <!-- Pour utiliser Lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.22</version>
        <scope>provided</scope>
    </dependency>
    <!-- Pour valider des données -->
    <dependency>
        <groupId>commons-validator</groupId>
        <artifactId>commons-validator</artifactId>
        <version>1.7</version>
    </dependency>
    
  7. À ce stade, votre projet doit ressembler à ceci :
    myapp
      | Deployment Descriptor        version agréable de web.xml
      | JAX-WS Web Services          pas nécessaire dans l'immédiat
      | JRE System...                la JRE
      | src/main/java                les codes Java
      | Server Runtime (Tomcat...)   les librairies de Tomcat
      + Deployed Resources
      |   + webapp                   votre application WEB
      |   |   + META-INF             le manifest
      |   |   + WEB-INF              configuration de votre app.
      |   |   |   | lib/             les librairies de votre app
      |   |   |   | web.xml          configuration de votre app
      |   + web-resources            les ressources
      | build/                       zone de travail
      | src/                         une autre vue des sources
      | target/                      zone de travail maven
      | pom.xml                      fiche de configuration maven
    
  8. Créez dans le répertoire webapp une page JSP et nommez-la index.jsp. Elle doit ressembler à ceci
    Fichier webapp/index.jsp
    <%@ page language="java"
        contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" %>
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <title>Title</title>
    </head>
    <body>
      <p>Hello.</p>
    </body>
    </html>
    
  9. Sélectionnez votre projet et exécutez-le sur le serveur Tomcat (menu « Run as... / Run on server »). Faites en sorte d'associer définitivement votre projet et le serveur Tomcat (une petite case à cocher avant le lancement).
  10. À ce stade, vous devez pouvoir accéder à votre application via l'URL (http://localhost:8080/myapp/). Vous pouvez maintenant ajouter des pages HTML, JSP et/ou des sources Java dans votre projet.

Mon premier bean (20m)

Une petite application (1h40)

Étape 1 : présenter

Étape 2 : traiter

Modifiez la servlet afin qu'elle réalise les actions suivantes (dans la méthode doPost)

À faire : à ce stade, vous pouvez renseigner le formulaire et valider, votre application doit afficher les données.

Étape 3 : ajouter une couche métier

Modifiez votre projet afin d'ajouter une classe métier orientée vers le traitement des personnes :

package myapp;

import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

public class PersonManager {

    final private Map<Integer, Person> persons;

    public PersonManager() {
        persons = Collections.synchronizedMap(new HashMap<>());
        save(new Person(100, "Paul", "paul@hello.fr"));
        save(new Person(200, "Laure", "laure@univ-amu.fr"));
    }

    private Person duplicate(Person p) {
        return new Person(p.getId(), p.getName(), p.getMail());
    }

    public Person find(Integer id) {
        var p = persons.get(id);
        return (p == null) ? null : duplicate(p);
    }

    public Collection<Person> findAll() {
        var result = new LinkedList<Person>();
        persons.values().forEach((Person p) -> {
            result.add(duplicate(p));
        });
        return result;
    }

    public void save(Person p) {
        var saved = duplicate(p);
        persons.put(saved.getId(), saved);
    }

    public boolean check(Person p) {
        throw new IllegalStateException("Not yet implemented");
    }

}

Étape 4 : valider

Étape 5 : enregistrer et lister

Étape 6 : ajouter

Ajoutez à votre page lister.jsp le lien ci-dessous afin de pouvoir ajouter une nouvelle personne :

<a href="edition">Ajouter une personne</a>

Important : prévoyez de placer en session une information sur le type d'édition en cours : création ou modification. En cas de modification, vous pourriez stocker l'identifiant de l'objet en cours d'édition.

Étape 7 : supprimer

Modifiez votre page lister.jsp et votre servlet pour ajouter et traiter le cas de la suppression :

<a href="supprimer?numero=123456">Supprimer cette personne</a>

Prévoyez que votre servlet traite également l'URL /myapp/supprimer en modifiant l'annotation :

@WebServlet(//
        description = "Les actions sur les personnes", //
        urlPatterns = { "/edition", "/supprimer" })

La servlet utilisera la méthode request.getServletPath() pour savoir sous quel nom elle a été appelée.