La servlet peut avoir besoin de transmettre des informations à la vue. Pour cela, elle va modifier l'objet request qui sera transmis à la vue en y ajoutant des attributs.
Reprenons la première application Test1Jakarta.
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String leMessage = "Ceci est un message transmis par la servlet Test1Servlet!"; request.setAttribute("msg", leMessage); RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/test1JSP.jsp"); dispatcher.forward(request, response); }
La méthode setAttribute permet d'ajouter un attribut à l'objet requête (request) et comme l'objet requête est transmis à la jsp, l'attribut deviendra accessible au niveau de la page test1JSP.jsp.
Note:
Affichage côté JSP avec scriptlet
<h1>Ma première JSP</h1> <p>Elle n'est accessible que depuis le contrôleur, c'est à dire la servlet</p> <% String unMessage = (String) request.getAttribute("msg"); out.println("<p>Message reçu: "+unMessage +"</p"); %> </body> </html>
http://localhost:8080/Test1Jakarta/PremierTest
Jalon1 : Le message renseigné au niveau de la servlet devrait s'afficher.
Affichage côté JSP avec Expression Language (EL)
<h1>Ma première JSP</h1> <p>Elle n'est accessible que depuis le contrôleur, c'est à dire la servlet</p> <p>Message reçu : ${msg}</p> </body> </html>
http://localhost:8080/Test1Jakarta/PremierTest
Jalon2 : Le message renseigné au niveau de la servlet devrait s'afficher.
Depuis le navigateur du poste client, il est possible d'indiquer des paramètres à la fin de l'url, comme ceci : http://localhost:8080/Test1Jakarta/PremierTest?pseudo=Martin Ces paramètres peuvent être récupérés au niveau de la servlet ou au niveau de la vue à l'aide de la méthode getParameter(“nomParametre”) appliquée à l'objet requête. Cette méthode retourne une chaine de caractères.
Si l’URL contient ?pseudo=Martin, la servlet récupère le paramètre :
String pseudo = request.getParameter("pseudo"); if (pseudo != null && !pseudo.isBlank()) { request.setAttribute("msg", "Bienvenue " + pseudo + " !"); }
<bootnote>
http://localhost:8080/Test1Jakarta/PremierTest?pseudo=Martin
Jalon3 : accueil Martin OK
Dans un site internet, certaines parties sont toujours identiques (entêtes, pied de page, menu, …). Au lieu de dupliquer les codes correspondants dans chaque JSP, ils pourront être isolés dans des pages spécifiques appelées fragments, ces fragments disposent de l'extension jspf, puis inclus dans les pages jsp.
Au niveau du dossier WEB-INF, créer le répertoire jspf (New > Folder), puis par un clic droit au niveau de ce répertoire, demander la création d'une nouvelle JSP. Nommer cette page menu et cocher “Create a JSP Segment”.
<nav> <ul> <li>Accueil</li> <li>Première page</li> <li>Seconde page</li> </ul> </nav>
Ajouter l'inclusion de cette page dans test1JSP.jsp juste après la balise <body> :
<%@include file="jspf/menu.jspf" %>
Sauvegarder et tester.
Jalon4 : menu inséré avec jspf
<bootnote learn>
Important: A vous de jouer : TP2