Introduction aux Servlets JEE
Introduction aux Servlets JEE
Achref El Mouelhi
[Link]@[Link]
Jakarta EE
r e
chèle MVC dans une application JEE
© A
Contrôleur du mod
Jakarta EE
Vue Modèle
(page JSP) (Java Bean)
H I ©
U EL
O
f E LM
ch r e
Requête
©A
HTTP
Contrôleur
(Servlet)
Réponse
HTTP
Client Serveur
Jakarta EE
Jakarta EE
Explication
H I ©
doGet() : s’exécute quand l’utilisateur demande une page (via la
EL
barre d’adresse, un lien hypertexte...)
O U
doPost() : s’exécute quand l’utilisateur envoie des données via
un formulaire par exemple
f E LM
...
ch r e
©A
Chaque méthode prend en paramètre :
HttpServletRequest : contenant des informations sur la
requête utilisateur
HttpServletResponse : permettant de personnaliser la réponse
à retourner à l’utilisateur
Jakarta EE
package [Link];
import [Link];
H I ©
EL
import [Link];
U
import [Link];
O
LM
public class TestServlet extends HttpServlet {
}
r e f E
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
ch
©A
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
}
}
Jakarta EE
Jakarta EE
Jakarta EE
Jakarta EE
Jakarta EE
Faire un clic droit sur src situé dans Java Resources de notre
projet
H I ©
Aller dans New et choisir Servlet
U EL
M O
E L par
Remplir le champ Java package:
f
re
[Link]
c h (par example)
Remplir© A Class name: par un nom suffixé par le mot
le champ
Servlet : TestServlet (par example)
Cliquer sur Next
Jakarta EE
Jakarta EE
package [Link];
// les imports
@WebServlet("/mapage")
H I ©
public class TestServlet extends HttpServlet {
U EL
private static final long serialVersionUID = 1L;
O
E LM
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
f
} r e
[Link]().append("Served at: ").append([Link]());
ch
©A
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Jakarta EE
Jakarta EE
chr e
A
Choisir XML File
©
Cliquer sur Next et choisir le nom [Link]
Jakarta EE
Contenu de [Link]
©A
<welcome-file>[Link]</welcome-file>
<welcome-file>[Link]</welcome-file>
<welcome-file>[Link]</welcome-file>
<welcome-file>[Link]</welcome-file>
<welcome-file>[Link]</welcome-file>
</welcome-file-list>
</web-app>
Jakarta EE
<welcome-file-list>
Contient les différent formats fichiers qui peuvent être utilisés
H I ©
comme page d’accueil de l’application
U EL
M O
f E L dans webapp
Ces fichiers seront directement
Pas besoin d’uneh
c re pour les afficher
Servlet
© Avia la route / ou directement via leur nom
Accessibles
Jakarta EE
...
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>[Link]</servlet-class>
H I ©
EL
</servlet>
O U
f E LM
ch r e
©A
Jakarta EE
...
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>[Link]</servlet-class>
H I ©
EL
</servlet>
O U
Explication
f E LM
ch r e
©A
<servlet> et </servlet> : déclaration de la Servlet
Jakarta EE
H I ©
EL
<description> et </description> : ajouter une description
OU
sur le fonctionnement de la Servlet (comme un commentaire)
M
E L
<load-on-startup> et </load-on-startup>
f : permet de
c hr
forcer le chargementede la Servlet lors de démarrage
... © A
Jakarta EE
Jakarta EE
...
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/mapage</url-pattern>
</servlet-mapping>
</web-app>
H I ©
U EL
O
f E LM
ch r e
©A
Jakarta EE
...
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/mapage</url-pattern>
</servlet-mapping>
</web-app>
H I ©
U EL
O
Explication
f E LM
ch r e
<servlet-mapping> et </servlet-mapping> : pour faire le mapping
A
Servlet/url
©
<servlet-name> et </servlet-name> : permet d’indiquer le nom de la
Servlet à appeler
Jakarta EE
Contenu de [Link]
r e E
<servlet-name>TestServlet</servlet-name>
f
<servlet-class>[Link]</servlet-class>
</servlet>
ch
<servlet-mapping>
©A
<servlet-name>TestServlet</servlet-name>
<url-pattern>/mapage</url-pattern>
</servlet-mapping>
</web-app>
Jakarta EE
H I ©
Remarque
U EL
O
f E LM
Dans la suite de ce cours, on n’utilisera que le routage par annotation.
ch r e
©A
Jakarta EE
r e
adresse : [Link]
ch at: /cours-jee
contenuA
: Served
©
Jakarta EE
©A
Jakarta EE
H I ©
EL
Comment afficher le Hello World
O U
Il faut modifier la Servlet (l’objet HttpServletResponse qui est
responsable de la réponse)
f E LM
ch r e
©A
Jakarta EE
Nouveau contenu de la Servlet
Jakarta EE
©A
Jakarta EE
On peut indiquer l’encodage et le type du contenu de la réponse
H I ©
accents
U EL
// indiquer l'encodage UTF-8 pour éviter les problèmes avec les
O
LM
[Link]("UTF-8");
r e f E
PrintWriter out = [Link]();
ch
[Link]("Hello World");
©A
}
L’objet PrintWriter
Jakarta EE
Pour retourner une page HTML complète
©A
[Link]("<title>Projet JEE</title>");
[Link]("</head>");
[Link]("<body>");
[Link]("Hello World");
[Link]("</body>");
[Link]("</html>");
}
Jakarta EE
Constats
Beaucoup de code dans la Servlet (trop long) pour un affichage.
simple
H I ©
UEL
O
Violation du modèle MVC : le contrôleur n’affiche pas de résultat.
f E LM
ch r e
©A
Jakarta EE
Constats
Beaucoup de code dans la Servlet (trop long) pour un affichage.
simple
H I ©
UEL
O
Violation du modèle MVC : le contrôleur n’affiche pas de résultat.
f E LM
ch r e
Solution ©A
Utiliser des vues pour l’affichage (chapitre suivant).
Jakarta EE
Jakarta EE
Protocole route
Scheme ServerPort ServletPath
ServerName ContextPath
H I ©
Parameter
UEL
O
f E LM
ch r e
[Link]
©A RequestURI
RequestURL
Jakarta EE
Protocole route
Scheme ServerPort ServletPath
ServerName ContextPath
H I ©
Parameter
UEL
O
f E LM
ch r e
[Link]
©A RequestURI
RequestURL
Jakarta EE
Protocole route
Scheme ServerPort ServletPath
ServerName ContextPath
H I ©
Parameter
UEL
O
f E LM
ch r e
[Link]
©A RequestURI
RequestURL
Jakarta EE
Protocole route
Scheme ServerPort ServletPath
ServerName ContextPath
H I ©
Parameter
UEL
O
f E LM
ch r e
[Link]
©A RequestURI
RequestURL
Jakarta EE
Protocole route
Scheme ServerPort ServletPath
ServerName ContextPath
H I ©
Parameter
UEL
O
f E LM
ch r e
[Link]
©A RequestURI
RequestURL
Jakarta EE
Protocole route
Scheme ServerPort ServletPath
ServerName ContextPath
H I ©
Parameter
UEL
O
f E LM
ch r e
[Link]
©A RequestURI
RequestURL
Jakarta EE
Protocole route
Scheme ServerPort ServletPath
ServerName ContextPath
H I ©
Parameter
UEL
O
f E LM
ch r e
[Link]
©A RequestURI
RequestURL
Jakarta EE
Protocole route
Scheme ServerPort ServletPath
ServerName ContextPath
H I ©
Parameter
UEL
O
f E LM
ch r e
[Link]
©A RequestURI
RequestURL
Jakarta EE
Protocole route
Scheme ServerPort ServletPath
ServerName ContextPath
H I ©
Parameter
UEL
O
f E LM
ch r e
[Link]
©A RequestURI
RequestURL
Jakarta EE
H I ©
UEL
O
f E LM
ch r e
©A
Jakarta EE
H I ©
UEL
Exemples O
f E LM
Il suffit de préfixer le nom des propriétés précédentes par get
ch r e
A
[Link]()
©
[Link]()
[Link]()
...
Jakarta EE
Exercice 1
Créez une Servlet CalculServlet accessible via une des quatre routes suivantes
/calcul/plus
/calcul/moins
H I ©
/calcul/fois
U EL
O
/calcul/div
f E LM
ch r e
La Servlet doit afficher chaque fois la deuxième partie de la route demandé
plus ©A
moins
fois
div
Jakarta EE
f E LM
ch r e
©A
Jakarta EE
f E LM
ch r e
Solution ©A
[Link]("nomParameter");
Jakarta EE
Exemple de récupération et d’affichage de paramètres de la requête
H I ©
EL
String nom = [Link]("nom");
String prenom = [Link]("prenom");
O U
LM
PrintWriter out = [Link]();
}
r e E
[Link]("Hello " + nom + " " + prenom);
f
ch
©A
Jakarta EE
Exemple de récupération et d’affichage de paramètres de la requête
H I ©
EL
String nom = [Link]("nom");
String prenom = [Link]("prenom");
O U
LM
PrintWriter out = [Link]();
}
r e E
[Link]("Hello " + nom + " " + prenom);
f
ch
©A
Remarque
Jakarta EE
©A
[Link]("Hello " + nom + " " + prenom);
} else {
[Link]("Hello world");
}
}
À ne pas confondre
H I ©
EL
OU
Les paramètres de requête : concept relatif aux requêtes HTTP
M
Les attributs de requête : E
f L introduit dans JEE (à voir dans
concept
chr
le prochain chapitre) e
© A
Jakarta EE
Exercice 2
H I ©
accepte deux paramètres a et b
U EL
O
LM
Si la route demandée est
e f E
/calcul/plus?a=2&b=5, alors la Servlet affiche le résultat de l’addition.
r
ch
/calcul/moins?a=2&b=5, alors la Servlet affiche le résultat de la soustraction.
©A
/calcul/fois?a=2&b=5, alors la Servlet affiche le résultat de la multiplication.
/calcul/div?a=2&b=5, alors la Servlet affiche le résultat de la division.
Jakarta EE
Si le paramètre est présent plusieurs fois dans l’URL avec le même nom, alors on peut
utiliser getParameterValues()
f E LM
}
}
ch r e
©A
Jakarta EE
Si le paramètre est présent plusieurs fois dans l’URL avec le même nom, alors on peut
utiliser getParameterValues()
f E LM
}
}
ch r e
©A
Exemple d’URL pour tester
[Link]
Jakarta EE
Exercice 3
Jakarta EE
Pour récupérer tous les paramètres dans un Map, on peut utiliser getParameterMap()
}
}
r e f E
}
ch
©A
Jakarta EE
Pour récupérer tous les paramètres dans un Map, on peut utiliser getParameterMap()
}
}
r e f E
}
ch
©A
Exemple d’URL pour tester
[Link]
8080/test-jee/home?nom=wick&nom=dalton&genre=homme&age=45
Jakarta EE
[Link]("MaServlet");
H I ©
UEL
O
f E LM
ch r e
©A
Jakarta EE
[Link]("MaServlet");
H I ©
UEL
O
Ne pas mettre "/" avant MaServlet.
f E LM
ch r e
©A
Jakarta EE
[Link]("MaServlet");
H I ©
UEL
O
Ne pas mettre "/" avant MaServlet.
f E LM
r e
ch l’URL depuis le contextPath
A
On peut aussi reconstruire
©
[Link]([Link]() + "/MaServlet");