Proposé de corriger : Programmation web Java 1
PARTIE 1 : Questions de connaissances (2,5 points)
1. Méthode appelée pour traiter chaque requête client
→ La méthode service() de la servlet.
2. Exception levée si l’initialisation échoue
→ En général : ServletException (levée dans la méthode init()).
3. Transfert de contrôle vers une JSP pour afficher une erreur
→ Utilisation de la technique du forward avec un RequestDispatcher, par exemple :
[Link]("[Link]").forward(request,
response);
4. Méthodes généralement redéfinies dans une HttpServlet
→ On redéfinit en général doGet() et doPost() (éventuellement doPut(),
doDelete() selon le besoin).
5. Balise JSP pour afficher directement le résultat d’une expression Java
→ La balise d’expression : <%= ... %>.
PARTIE 2 : Questions de compréhension (10 points)
1. Cycle de vie d’une Servlet (2 pts)
Description attendue (les mots-clés suffisent si bien enchaînés) :
• Le conteneur charge la classe de la servlet et crée une instance.
• Il appelle ensuite la méthode init(ServletConfig config) une seule fois à
l’initialisation.
• Pour chaque requête, le conteneur appelle la méthode
service(HttpServletRequest, HttpServletResponse), qui, dans le
cas d’HttpServlet, délègue vers doGet(), doPost(), etc.
• À l’arrêt de l’application ou au déchargement de la servlet, le conteneur appelle
destroy(), permettant de libérer les ressources.
2. Rôle de [Link] et informations qu’il contient (2 pts)
• C’est le descripteur de déploiement de l’application web Java.
• Il sert à déclarer et configurer :
• les servlets et leurs mappings d’URL (<servlet>, <servlet-
mapping>),
• les pages d’accueil (<welcome-file-list>),
• les pages d’erreur (<error-page>),
• les filtres, listeners,
• des paramètres d’initialisation applicatifs (<context-param>), etc.
3. Différence entre MVC1 et MVC2 en Java EE (2 pts)
• MVC1 :
• La JSP joue à la fois le rôle de vue et de contrôleur.
• La logique de contrôle (récupération des données, navigation) peut se trouver
dans la JSP (scriptlets), ce qui mêle présentation et logique métier.
• MVC2 :
• Introduit une Servlet contrôleur centrale (Front Controller) qui reçoit les
requêtes, gère la logique, appelle le modèle (JavaBeans, DAO) puis forward
vers des JSP qui ne servent que de vue.
• Meilleure séparation des responsabilités, code plus maintenable.
4. Récupérer une session utilisateur depuis une Servlet vers une JSP (2 pts)
Dans la servlet :
• Récupérer ou créer la session :
HttpSession session = [Link]();
[Link]("nom", "Dupont");
• Faire un forward vers la JSP :
[Link]("[Link]").forward(request, response);
Dans la JSP, on accède à la session via l’objet implicite session ou via EL : $
{[Link]}.
La bonne idée à retenir : [Link]() en servlet, puis utilisation de
l’objet implicite session en JSP.
5. Rôle de JSTL dans les JSP (2 pts)
• La JSTL (JSP Standard Tag Library) fournit des balises standard pour remplacer
les scriptlets Java dans les JSP.
• Core tags (<c:if>, <c:forEach>, <c:set>, etc.) : pour les conditions,
boucles, affectations, etc.
• Format tags (<fmt:...>) : pour formater nombres, dates, gérer la localisation
(i18n).
• Functions tags (fn:...) : fonctions utilitaires (manipulation de chaînes, listes,
etc., utilisées dans les expressions EL).
But : écrire des pages plus lisibles, plus propres, sans code Java dans la vue.
PARTIE 3 : Programmation Servlet (7,5 points)
1. Formulaire HTML (2 pts)
Exemple de réponse :
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Enregistrement étudiant</title>
</head>
<body>
<form action="EtudiantServlet" method="post">
Nom : <input type="text" name="nom" required><br>
Prénom : <input type="text" name="prenom" required><br>
Email : <input type="email" name="email" required><br>
<input type="submit" value="Enregistrer">
</form>
</body>
</html>
Points clés attendus :
• method="post" (ou get, mais cohérence avec la servlet).
• Champs name="nom", name="prenom", name="email".
• action="EtudiantServlet" (ou l’URL mapping utilisé).
2. Servlet qui récupère les paramètres (3 pts)
Exemple de code :
java
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@WebServlet("/EtudiantServlet")
public class EtudiantServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String nom = [Link]("nom");
String prenom = [Link]("prenom");
String email = [Link]("email");
// Ici on pourra ensuite afficher ou traiter ces informations
// (affichage demandé à la question 3).
}
}
Points attendus :
• Classe qui étend HttpServlet.
• Redéfinition de doPost() (ou doGet() si cohérent).
• Récupération de chaque paramètre avec [Link]("nom"), etc.
3. Afficher les informations saisies dans la réponse HTTP (2 pts)
Suite de la servlet précédente, on peut écrire :
java
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String nom = [Link]("nom");
String prenom = [Link]("prenom");
String email = [Link]("email");
[Link]("text/html; charset=UTF-8");
[Link] out = [Link]();
[Link]("<!DOCTYPE html>");
[Link]("<html>");
[Link]("<head><title>Étudiant enregistré</title></head>");
[Link]("<body>");
[Link]("<h1>Informations de l'étudiant</h1>");
[Link]("<p>Nom : " + nom + "</p>");
[Link]("<p>Prénom : " + prenom + "</p>");
[Link]("<p>Email : " + email + "</p>");
[Link]("</body>");
[Link]("</html>");
}
Points clés :
• [Link]("text/html; charset=UTF-8");
• Récupération du PrintWriter via [Link]().
• Affichage des valeurs récupérées.
4. Annotation pour déclarer une servlet (0,5 pt)
→ L’annotation est @WebServlet