Exercice 1 - Une première JSP⚓︎
Le but de cet exercice est de créer une première JSP, qui sera accessible via une Servlet.
Nous allons créer un formulaire, contenant un seul champ de type nombre (<input type="number"/>
), qui permet, lorsqu'on clique sur
-
Créer une Servlet
ListeServlet
, dont la méthodedoGet
créé une liste deString
vide, placée dans la requête avec la clefLISTE
, et qui redirige versafficheListe.jsp
☕ Code Java 1 2 3 4 5 6
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("LISTE", new ArrayList<String>()); //(1)! request.getRequestDispatcher("afficheListe.jsp").forward(request, response); }
- Dans la JSP
afficheListe.jsp
, nous allons utiliser une liste. Pour ne pas avoir d'erreur (uneNullPointerException
), on place dans la requête une liste vide au premier affichage.
Paramètres et Attributs en requête
On peut placer deux types d'objets dans la requête :
-
Des paramètres :
Depuis un formulaire, on peut placer des
parameter
. Ces sont desjava.lang.String
. Il n'est pas possible de placer un paramètre en requête via l'objet Java (on ne peut pas fairerequest.setParameter(clef, valeur)
). -
Des attributs :
Dynamiquement, dans une Servlet par exemple, on peut placer des
attributes
. Ces sont desjava.lang.Objects
, qu'il faut donc caster lorsqu'on les manipule. On place des attributs en requête via l'objet Java :request.setAttribute(clef, valeur)
.
- Dans la JSP
-
Déployer cette Servlet dans le descripteur de déploiement :
Le fichier 📄 web.xml 1 2 3 4 5 6 7 8 9 10
<?xml version="1.0" encoding="UTF-8"?> <servlet> <servlet-name>listeS</servlet-name> <servlet-class>fr.univtours.polytech.premierprojet.servlet.ListeServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>listeS</servlet-name> <url-pattern>/liste</url-pattern> </servlet-mapping>
-
Créer la page JSP
afficheListe.jsp
, qui contient le formulaire avec le champ nombre, dont lename
esttaille
(c'est le nom du paramètre en requête). Pour cela, faire un clic droit sur le projet, puis :material-mouse:New > Other
, puis :material-file-tree:Web > JSP File
, puisNext > . Saisir le nom de la JSP en indiquant son emplacement (📂src/main/webapp
), et enfin cliquer surFinish .Java Server Page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<%@page import="java.util.List"%><!--(1)!--> <html><head><title>Affiche une liste dynamique</title></head> <body> <form action="liste" method="post"> <input type="number" name="taille" value="<%=((List<String>)request.getAttribute("LISTE")).size()%>"/><!--(2)!--> <input type="submit" name="Valider"/> </form> <table> <% List<String> liste = (List<String>)request.getAttribute("LISTE"); //(3)! for (String mot : liste) { %> <tr><td><%=mot %></td></tr> <% } %> </table> </body> </html>
-
Il s'agit d'une directive JSP.
Elle permet d'importer un objet Java nécessaire.
-
Il s'agit d'une expression JSP.
L'attribut
value
permet de donner une valeur à ce champ à l'affichage de la page. Ici, la valeur sera 0 au premier affichage (la taille de la liste vide), puis celle saisie précédemment aux suivants. -
Il s'agit d'un scriptlet.
On récupère la liste placée en attribut de la requête, et on affiche autant de ligne dans le tableau qu'il y a d'éléments dans la liste.
-
-
Enfin, dans la Servlet ajouter la méthode
doPost
, qui gère le clic de l'utilisateur surValider :☕ Code Java 1 2 3 4 5 6 7 8 9 10 11
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Integer taille = Integer.parseInt(request.getParameter("taille")); List<String> liste = new ArrayList<String>(); for (int i = 0; i < taille; i++) { liste.add("Bonjour !"); //(1)! } request.setAttribute("LISTE", liste); //(2)! request.getRequestDispatcher("afficheListe.jsp").forward(request, response); //(3)! }
- On génère la liste avec autant de Bonjour ! que souhaité.
- On place cette liste en attribut de la requête, pour pouvoir la récupérer dans la JSP.
- On redirige la requête vers la JSP.
-
Vérifier que l'application est fonctionnelle via http://localhost:8080/PremierProjet/liste.