d3:a03

D3-A03 : JAKARTA EE : la communication d'informations

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.

Modifier la méthode doGet de la servlet Test1Servlet

@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:

  • On peut inclure du code Java dans une JSP, qui sera encadré par <% et %> (directive/scriptlet), mais peu recommandé aujourd'hui car insuffisamment sécurisé, on préferera utiliser la méthode EL(Expression Language)
  • Sans EL, on aurait utilisé la méthode getAttribute qui permet de récupérer l'attribut qui avait été ajouté à l'objet request au niveau de la servlet. Cette méthode retourne un objet, il faut effectuer un transtypage pour le récupérer sous la forme voulue (String ici)</bootnote>

Modifier la vue test1JSP.jsp pour qu'elle tienne compte de l'attribut ajouté par la servlet

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>

Sauvegarder et tester : même url que précédemment

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>

Sauvegarder et tester : même url que précédemment

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>

  • Cette méthode sera également utilisée pour récupérer des informations passées dans le corps de la requête avec POST (exemple d'un formulaire), en utilisant la méthode doPost de la servlet.
  • Avec EL, dans la JSP, pas de changement : ${msg} affichera le message personnalisé.</bootnote>

Les inclusions avec fragments JSPF

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”.

  • Compléter le contenu de menu.jspf ainsi :
<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>

  1. Qu'est-ce qui permet à une servlet de transmettre une information à une page JSP ?
  2. Quelle instruction est nécessaire au niveaudelaservlet ?
  3. Comment peut-on intégrer du code javadansunepagejsp ?
  4. Quelle instruction permet de générer du code html en Java ?
  5. Quelle instruction permet à la page JSP de récupérer une information transmise par la servlet ?
  6. Qu'est qui permet de récupérer des informations transmises par le poste client ?
  7. Qu'elle instruction permet de récupérer les informations venant du poste client ?
  8. Comment tester l'existence d'une information ?
  9. Qu'est-ce qu'un fragment ? Pourquoi en utiliser ?
  10. Comment créer un fragment ?
  11. Comment inclure un fragment dans une JSP ?

Important: A vous de jouer : TP2

  • d3/a03.txt
  • Dernière modification : 2025/09/15 11:37
  • de dthevenot