Cours de Servlet JSP 2 en PDF (Débutant)
Servlet JSP 2 : technologie Java permettant de créer des applications web dynamiques en intégrant du code Java dans des pages HTML exécutées côté serveur par un conteneur de servlets (exécution côté serveur). Le cours porte sur les bases communes de JSP 2.0 applicables à Java EE et Jakarta EE, avec des exemples de configuration et de déploiement.
🎯 Ce que vous allez apprendre
- Conception d’un tag personnalisé : créer des balises personnalisées pour enrichir vos pages JSP.
- Évolutions vers la 2.0 : comprendre les améliorations de JSP 2.0 par rapport à 1.2.
- Interface SimpleTag et TLD : implémentation pratique et gestion du fichier de description des balises.
- JSTL et EL : réduction des scriptlets et meilleure séparation présentation/logiciel.
- Gestion de l'état client : sessions, cookies et bonnes pratiques de sécurité.
- Persistance et déploiement : introduction à JDBC/DAO et structure d'un fichier WAR pour Tomcat.
📑 Sommaire du document
- Architecture et cycle de vie des Servlets Java
- Maîtrise de la JSTL et des expressions EL
- Tags personnalisés et fichier TLD
- Gestion des formulaires et état client
- Persistance des données (JDBC, DAO)
- Configuration et déploiement (Tomcat, fichier WAR)
Architecture et cycle de vie des Servlets Java
Les Servlets s'exécutent dans un conteneur de servlets (ex : Tomcat) et participent typiquement au rôle de contrôleur dans une architecture MVC. Leur cycle de vie comprend trois phases principales : initialisation via init(), traitement des requêtes via service() (délégation vers doGet(), doPost(), doPut() ou doDelete(), utilisation de l'objet HttpServletRequest pour récupérer les données) et nettoyage via destroy(). La maîtrise de ces étapes est essentielle pour gérer correctement les ressources, les sessions et la concurrence dans une application web.
Maîtrise de la JSTL et des expressions EL
La JSTL (JavaServer Pages Standard Tag Library) et l'Expression Language (EL) réduisent l'utilisation de scriptlets Java bruts et améliorent la séparation entre présentation et logique. JSTL fournit des balises pour les conditions, les boucles, l'accès aux données et les formats ; EL permet d'accéder aux beans et aux attributs de requête/session/application. Dans le contexte Java EE / Jakarta EE, privilégier JSTL/EL réduit les risques liés au mélange logique/présentation et facilite la maintenabilité.
Installation de la JSTL
Pour JSP 2.0, l'usage de JSTL 1.2 est la norme. Sur un projet sans gestionnaire de dépendances, copiez dans WEB-INF/lib les JAR nécessaires (ex. jstl.jar, standard.jar ou jstl-api.jar selon la distribution). Dans des projets modernes, utiliser Maven ou Gradle reste recommandé : cela garantit l'inclusion de la version 1.2 adaptée à votre plateforme (Java EE / Jakarta EE).
Environnement technique
- Apache Tomcat
- Conteneur de servlets très utilisé pour le développement et le déploiement. Port par défaut :
8080. Le dossierwebappscontient les applications déployées (WAR or exploded) et permet le déploiement automatique. - GlassFish
- Serveur d'applications compatible Java EE / Jakarta EE.
- Conteneur de servlets
- Rôle central pour l'exécution des composants web et la gestion du cycle de vie des Servlets.
👤 À qui s'adresse ce cours ?
- Public cible : débutants souhaitant développer des applications web avec JSP.
- Prérequis : connaissances de base en Java (syntaxe, POO) et HTML recommandées.
❓ Foire Aux Questions (FAQ)
Qu'est-ce que JSP ?
JSP, ou JavaServer Pages, est une technologie Java permettant de créer des pages web dynamiques en intégrant du code Java dans le HTML.
Pourquoi utiliser des tags personnalisés ?
Les tags personnalisés facilitent la réutilisation, améliorent la lisibilité et réduisent la duplication dans les pages JSP.
Exemple de code : Ma première Servlet
Exemple minimal d'une servlet héritant de HttpServlet, montrant la surcharge de doGet() et l'envoi d'une réponse simple.
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
out.println("Hello from HelloServlet!");
}
}
}
Pourquoi choisir ce support de cours ?
Ce PDF de 84 pages, rédigé par Mickaël Baron, propose une progression pédagogique adaptée aux débutants : principes fondamentaux, exemples pas à pas et sections pratiques (tags personnalisés, TLD, JSTL/EL). La présentation privilégie des extraits de code commentés et renvoie aux ressources officielles pour approfondir les spécifications (Documentation Jakarta EE).
Configuration et déploiement sur Tomcat
Le descripteur web.xml joue un rôle clé pour le mapping des servlets, la configuration de filtres/listeners et les paramètres d'initialisation. Les annotations simplifient aujourd'hui le déploiement, mais la connaissance du descripteur reste utile pour des configurations avancées et la compatibilité inter-conteneurs.
Structure minimale d'un fichier .war pour Tomcat : le WAR est une archive ZIP contenant la racine de l'application, le dossier WEB-INF (avec web.xml, classes/ et lib/) et les JSP/ressources publiques. Respecter cette organisation garantit que Tomcat reconnaisse et déploie correctement l'application.
Comparaison : Scriptlets Java vs JSTL/EL
Les scriptlets insèrent du Java directement dans la JSP, ce qui peut mener à un mélange difficile à maintenir. JSP 2.0 encourage JSTL et EL pour séparer présentation et logique, améliorer la lisibilité et faciliter les tests.
Gestion des formulaires HTML
Pour récupérer les données d'un formulaire dans une servlet, utilisez request.getParameter("nomDuChamp") pour un champ simple, request.getParameterValues("nomDuChamp") pour des valeurs multiples, ou request.getParameterMap() pour l'ensemble des paramètres. En cas de POST, appelez request.setCharacterEncoding("UTF-8") avant la lecture des paramètres et validez/échappez les données côté serveur pour prévenir les injections et les vulnérabilités XSS.
Structure d'un projet Web Java
myapp/
├─ WEB-INF/
│ ├─ web.xml
│ ├─ lib/
│ │ ├─ jstl-1.2.jar
│ │ └─ jstl-api.jar
│ └─ classes/
├─ index.jsp
└─ WEB-INF/views/
Le pattern MVC avec Servlets et JSP
Le pattern MVC (Model-View-Controller) sépare les responsabilités : le controller (Servlet) traite la requête, le model encapsule la logique métier and l'accès aux données, and la view (JSP + JSTL/EL) rend la présentation. En pratique, la servlet collecte les paramètres, invoque les services ou DAO, fixe des attributs de requête/session and transfère le contrôle vers une JSP via RequestDispatcher.forward(). Cette organisation améliore la testabilité and la maintenabilité du code Java.
Différence entre Forward et Redirect
La méthode RequestDispatcher.forward()response.sendRedirect()
Implémentation du pattern MVC en Java EE
Dans Java EE and Jakarta EE, implémentez le controller par des HttpServlet focalisées sur la coordination ; placez la logique métier dans des services ou DAO and utilisez des JSP équipées de JSTL/EL pour la vue. Privilégiez la validation côté serveur, centralisez la gestion des exceptions and évitez la logique métier dans les JSP. Le découplage entre couches facilite les tests unitaires and l'évolution de l'application.
Persistance des données
Les Servlets ne devraient pas accéder directement à la base de données : utilisez un pattern DAO pour isoler les opérations JDBC and faciliter les tests. Un DAO encapsule les connexions, les requêtes SQL and la transformation des ResultSet en objets métiers. En production, préférez un pool de connexions (via JNDI) plutôt que d'ouvrir/fermer manuellement des connexions JDBC dans la servlet. Cette architecture réduit les risques de fuite de ressources and améliore la maintenabilité du code.
Configuration du dossier WEB-INF and des bibliothèques
WEB-INF contient les éléments non accessibles directement par le client : web.xml, le répertoire classes compilées and lib pour les JAR. Placez les dépendances JSP comme les JAR JSTL (ex. jstl-1.2.jar, jstl-api.jar) dans WEB-INF/lib. Cette organisation garantit que les bibliothèques sont chargées par le classloader de l'application and protège les ressources sensibles.
Méthodes HTTP : doGet vs doPost
| Usage | doGet |
doPost |
|---|---|---|
| Idempotence | Généralement idempotent — adapté aux lectures and aux ressources consultables. | Non idempotent — adapté aux actions modifiant l'état (création, mise à jour). |
| Taille des données | Limité par l'URL and le client — déconseillé pour de grandes charges utiles. | Permet l'envoi de données volumineuses dans le corps de la requête. |
| Sécurité | Paramètres visibles dans l'URL — moins adapté aux informations sensibles. | Paramètres dans le corps — mieux adapté pour les données sensibles (mais à sécuriser via HTTPS). |