====== D3-A03 : JAKARTA EE : la communication d'informations ====== ===== Transmission de données ===== ==== Transmission de données de la servlet vers la vue : les attributs ==== 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. * 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) === Modifier la vue test1JSP.jsp pour qu'elle tienne compte de l'attribut ajouté par la servlet === Affichage côté JSP **avec scriptlet**

Ma première JSP

Elle n'est accessible que depuis le contrôleur, c'est à dire la servlet

<% String unMessage = (String) request.getAttribute("msg"); out.println("

Message reçu: "+unMessage +" === 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)**

Ma première JSP

Elle n'est accessible que depuis le contrôleur, c'est à dire la servlet

Message reçu : ${msg}

=== 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. ===== Transmission de données du client vers la servlet : les paramètres ===== 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 + " !"); } ==== Modifier la vue test1JSP.jsp ==== * 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é. ==== Sauvegarder et tester ==== http://localhost:8080/Test1Jakarta/PremierTest?pseudo=Martin Jalon3 : accueil Martin OK ====== 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 : Ajouter l'inclusion de cette page dans **test1JSP.jsp** juste après la balise : <%@include file="jspf/menu.jspf" %> Sauvegarder et tester. Jalon4 : menu inséré avec jspf - Qu'est-ce qui permet à une servlet de transmettre une information à une page JSP ? - Quelle instruction est nécessaire au niveaudelaservlet ? - Comment peut-on intégrer du code javadansunepagejsp ? - Quelle instruction permet de générer du code html en Java ? - Quelle instruction permet à la page JSP de récupérer une information transmise par la servlet ? - Qu'est qui permet de récupérer des informations transmises par le poste client ? - Qu'elle instruction permet de récupérer les informations venant du poste client ? - Comment tester l'existence d'une information ? - Qu'est-ce qu'un fragment ? Pourquoi en utiliser ? - Comment créer un fragment ? - Comment inclure un fragment dans une JSP ? A vous de jouer : TP2