====== D3-A02 : Créer un premier projet Jakarta EE ====== * Menu File > New Project. * Sélectionner Maven > Web Application. * Donner un nom au projet (**Test1Jakarta**). * Enregistrer votre projet dans le dossier NetBeansProjects * Sélectionner Payara Server comme serveur cible. * Choisir Jakarta EE 9.1 ou 10 comme plateforme. * Cliquer sur Finish. ===== Configuration proxy pour Maven ===== Apache Maven (couramment appelé Maven) est un outil de gestion et d'automatisation de production des projets logiciels Java en général et Java EE en particulier. Il est utilisé pour automatiser l'intégration continue lors d'un développement de logiciel. Lors de la création de projets, Maven a besoin d'avoir accès à des dépôts distants, il doit donc pouvoir passer le proxy du lycée. Pour cela il faut apporter des modifications dans le fichier de configuration de Maven (**faire une copie settings.old.xml au préalable**) proxy-http true http 10.121.38.1 8080 localhost|127.0.0.1 proxy-https true https 10.121.38.1 8080 localhost|127.0.0.1 Redémarrer Netbeans et votre ordinateur si besoin pour prendre en compte le changement de configuration. ===== Tester son projet ===== - Cliquer droit sur ton projet → Run.**(Attention au JDK !)** - NetBeans compile et déploie l’application (.war) sur Payara. - Ouvrir le navigateur et aller sur : http://localhost:8080/Test1Jakarta/ -> une page "Hello Word" s'affiche, c’est le fichier index.html qui est exécuté, vous pouvez le changer et constater sa mise à jour Jalon1 : "Hello Word" s'affiche ===== La servlet et la vue ===== Notre application Test1Jakarta comprend notamment : * le dossier **Web Pages**, où seront stockés les vues (JSP), les script javascript et les feuilles de styles. * le dossier **Source Packages** contiendra les classes Java (les servlets) ==== Le serveur d'application et et le modèle MVC ==== Le serveur web place chaque requête reçue dans un objet de type **HttpServletRequest** et initialise une réponse dans un objet de type **HttpServletResponse**. Dans le modèle MVC, toute requête de la part d'un client doit, dans un premier temps, passer par la **servlet** qui décide de la réponse à donner. Le rôle de la servlet est donc d'intercepter les requêtes HTTP, de les traiter et de gérer la réponse (grâce aux objets de type HttpServletRequest et HttpServletResponse). Il existe principalement 2 types de requête HTTP : * **les requêtes de type GET** : le client utilise cette méthode pour demander une ressource web au serveur via une URL. *** les requêtes de type POST** : le client utilise cette méthode s'il souhaite que les données (saisies dans un formulaire par exemple) qu'il communique au serveur soient présentes au niveau du corps de la requête. La servlet devra disposer de méthodes permettant de traiter ces 2 types de requêtes. ==== Création de la servlet ==== Jakarta EE dispose du **package servlet** dans lequel on retrouvera notamment la **classe interface Servlet**, et également la **classe abstraite HttpServlet** qui implémente cette interface. La classe **HttpServlet** dispose notamment des méthodes abstraites **doGet** et **doPost**. * **Classe interface** : classe abstraite décrivant des comportements qui seront développés dans les classes qui l'implémentent. * **Classe abstraite** : classe qui ne peut être instanciée, mais qui peut disposer de méthodes abstraites qui devront être redéfinies dans ses classes filles. **Notre servlet devra héritée de la classe HttpServlet, et devra donc redéfinir les méthodes doGet et doPost.** Bonne nouvelle : NetBeans s'occupe de (presque) tout ! Il faut dans un premier temps **créer une classe de type Servlet** qui sera chargée de traiter les requêtes arrivant au serveur et de préparer la réponse. Nous travaillons toujours à partir du **projet Test1Jakarta**. - Au niveau de NetBeans, à partir du projet Test1Jakarta : **clic droit sur Source Packages puis choisir New et Servlet** - Appeler cette classe **Test1Servlet ** et préciser le **nom du package : com.test.servlets**, clic sur **'Next'**. - Au niveau de l'écran **"Configure Servlet Deployment"**, **cocher "Add information to deployment descriptor (web.xml)", dans "URL Pattern" préciser : /PremierTest, puis clic sur 'Finish'.** {{:promo_2026:sio2:slam:d3:newservlet.jpg?600|}} NetBeans a généré automatiquement la classe **Test1Servlet** qui hérite de la classe HttpServlet. - Regarder le contenu de la classe **Test1Servlet** (Test1Servlet.java) générée - Vérifier la présence des méthodes **doGet** et **doPost** Il faut ensuite préciser à l'application que la servlet existe(donner son nom), et le chemin permettant d'y accéder. Ceci est effectué par le biais d'annotations** @WebServlet** Dans la classe Test1Servlet, mettre l’annotation juste avant la déclaration de la classe: **@WebServlet(name = "Test1Servlet", urlPatterns = {"/PremierTest"})** et importer le package **jakarta.servlet.annotation.WebServlet** si besoin. package com.test.servlets; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; /** * * @author dthev */ @WebServlet(name = "Test1Servlet", urlPatterns = {"/PremierTest"}); public class Test1Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // } } Dans ce fichier, 2 parties sont importantes : - le package qui gère la servlet - l'annotation @WebServlet permet de faire correspondre la servlet nommée au niveau de la partie précédente (Test1Servlet) avec une adresse url accessible depuis le poste client(url-pattern). Ainsi, le poste client devra indiquer : **http://localhost:8080/Test1Jakarta/PremierTest** //Remarque :// Si on ne voulait pas que l'utilisateur précise PremierTest, il suffisait d'indiquer le caractère / entre les balises et * Vérifier le contenu du fichier web.xml : {{:promo_2026:sio2:slam:d3:webxml.jpg?400|}} * Sauvegarder * Tester depuis le navigateur (recompiler si besoin, attention au JDK): * URL : **http://localhost:8080/Test1Jakarta/PremierTest** * Le message suivant doit s'afficher : **//Servlet Test1Servlet at /Test1Jakarta//** Jalon2 : "Servlet Test1Servlet at /Test1Jakarta" s'affiche Actuellement, la page affichée est créée au niveau de la méthode **processRequest** de la classe **Test1Servlet** à l'aide des instructions **out.printl("…")**. La méthode **processRequest** est appelée par les méthodes **doGet** (sollicitée en cas de requête de type GET) et **doPOST** (sollicitée en cas de requête de type POST). Le poste client communique uniquement avec la couche contrôleur (comprenant la servlet) : il lui envoie une requête de type GET, et la servlet lui retourne la réponse. {{:promo_2026:sio2:slam:d3:cliserv.jpg?600|}} Or dans le modèle MVC, la partie réponse doit être gérée au niveau de la couche Vue. ==== Création de la vue ==== Le modèle MVC indique que la création des pages web retournées au poste client doit être effectuée au niveau de la couche Vue. **En Java, une vue est une page JSP**. Elle ne doit pas être accessible directement depuis le navigateur, celui-ci doit s'adresser uniquement au contrôleur (la servlet) qui demandera à la couche Vue d'envoyer la réponse voulue. La servlet est toujours le point d'entrée unique de l'application. === 1. Qu'est-ce qu'une page JSP (Java Server Page) ? === C'est un document qui ressemble à une page html, avec quelques différences : * extension .jsp * elle peut contenir des balises spécifiques jsp qui permettent d'appeler du code Java * la page jsp génère une page html qui sera retournée au serveur //(Remarque : Similitude avec une page php)// === 2. Création d'une page JSP inaccessible directement depuis le poste client. === - Clic droit au niveau du répertoire WEB-INF du dossier Web Pages, puis New et JSP - Appeler-la **test1JSP**, puis clic sur 'Finish' - Modifier son contenu, par exemple :

Ma première JSP

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

- Puis sauvegarder (recompiler si besoin, attention au JDK): - Essayer d'y accéder directement en saisissant l'url suivante au niveau du navigateur : http://localhost:8080/Test1Jakarta/WEB-INF/test1JSP.jsp - Le serveur a dû générer un rapport d'erreur (Erreur 404), l'accès à cette page doit s'effectuer depuis la servlet. {{:promo_2026:sio2:slam:d3:404payarajsp.jpg?400|}} Jalon3 : la page d'erreur 404 s'affiche ==== Mise à jour de la servlet ==== Le navigateur du poste client doit appeler la servlet en saisissant cette url : http://localhost:8080/Test1Jakarta/PremierTest et la servlet (Test1Servlet) doit demander à la vue (page test1JSP.jsp) de générer et d'envoyer la page html au client. {{:promo_2026:sio2:slam:d3:cliserv2.jpg?600|}} Quand un navigateur demande à un serveur HTTP une ressource par le biais de l'adresse URL, il effectue une requête de type GET. Au niveau de notre servlet Test1Servlet, c'est la méthode doGet qui est chargée de prendre en charge les requêtes de type GET. Nous allons la modifier afin qu'elle sollicite l'exécution de notre vue test1JSP.jsp. __1. Apporter les modifications suivantes à la méthode **doGet** de la servlet **Test1Servlet** :__ Remplacer l'appel de la méthode processRequest par un appel à la vue. {{:promo_2026:sio2:slam:d3:modifdoget.jpg?800|}} - **getServletContext()** est une méthode retournant un objet de type ServletContext, cet objet dispose de méthodes utiles pour gérer la couche Contrôleur dans son rôle d'aiguilleur. - **getRequestDispatcheur(…)** est une méthode retournant un objet de type RequestDispatcheur, c'est par cet objet que notre vue sera sollicitée. - la méthode **forward** permet d'envoyer à la page jsp la requête initiale et l'initialisation de la réponse qui sera retournée au client. Ces informations sont indispensables à la vue : elles lui permettent de connaître le contenu exact de la requête initiale avec les données attachées et de savoir les références du poste client à qui il faut retourner la réponse. __2. Sauvegarder et tester (recompiler si besoin, attention au JDK):__ saisir l'url suivante au niveau du navigateur : http://localhost:8080/Test1Jakarta/PremierTest La page suivante doit s'afficher : {{:promo_2026:sio2:slam:d3:premierepage.jpg?400|}} Jalon4 : la première page s'affiche avec le bon message - Comment créer une servlet ? - À quoi sert le fichier web.xml ? - Quelles sont les 2 méthodes obligatoirement présentes dans une servlet ? Quand sont-elles exécutées ? - Où doit-on créer une page JSP ? - Que doit-on faire au niveau de la servlet pour qu'elle sollicite une page JSP ? ======