[go: up one dir, main page]

0% ont trouvé ce document utile (0 vote)
318 vues42 pages

Cours Java Servlet

Transféré par

losus007
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
318 vues42 pages

Cours Java Servlet

Transféré par

losus007
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 42

JEE : Servlets

Achref El Mouelhi

Docteur de l’université d’Aix-Marseille


Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel

elmouelhi.achref@gmail.com

H & H: Research and Training 1 / 35


Plan

1 Introduction
2 Structure d’une Servlet
3 Première Servlet avec Eclipse
Routage par annotation
Routage dans web.xml
4 Objet HttpServletRequest
5 Tester la Servlet
6 Paramètres de requête
7 Rediriger vers une autre Servlet
8 Servlet multi-routes

H & H: Research and Training 2 / 35


Introduction

JEE

Servlet : le cœur d’une application JEE


H I ©
EL
Classe Java héritant de la classe HttpServlet
U
Recevant une requête HTTP (deM OGET, POST...) et retournant
f E L type
une réponse HTTP
r e
chèle MVC dans une application JEE
© A
Contrôleur du mod

H & H: Research and Training 3 / 35


Introduction

JEE

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

H & H: Research and Training 4 / 35


Structure d’une Servlet

JEE

Une Servlet : classe Java héritant de HttpServlet


package org.eclipse.config;
H I ©
UEL
import javax.servlet.http.HttpServlet; O
f E LM
ch r e
public class TestServlet extends HttpServlet {

} ©A

H & H: Research and Training 5 / 35


Structure d’une Servlet

JEE
Explication

HttpServlet contient des méthodes abstraites, préfixées par


do(), associées aux différentes méthodes (verbes) HTTP.

I ©
doGet() : s’exécute quand l’utilisateur demande une page (via la
H
barre d’adresse, un lien hypertexte...)
UEL
O
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

H & H: Research and Training 6 / 35


Structure d’une Servlet

JEE
Ajoutons les méthodes doGet() et doPost() à TestServlet

package org.eclipse.config;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
H I ©
EL
OU
public class TestServlet extends HttpServlet {
M
f E L
protected void doGet(HttpServletRequest request,

ch r
HttpServletResponseeresponse) {
}
© A
protected void doPost(HttpServletRequest request,
HttpServletResponse response) {

}
}

H & H: Research and Training 7 / 35


Structure d’une Servlet

JEE
Mais quand cette Servlet sera exécutée ?
Quand l’utilisateur saisit une URL dans le navigateur, il envoie une
requête HTTP à notre contrôleur (qui est en vrai une Servlet)
Mais quelle Servlet ? je peux en avoir plusieurs
H I ©
U
Le serveur va chercher quelle Servlet est E L
associée à cette route

L MO
r e f E
A ch
©

H & H: Research and Training 8 / 35


Structure d’une Servlet

JEE
Mais quand cette Servlet sera exécutée ?
Quand l’utilisateur saisit une URL dans le navigateur, il envoie une
requête HTTP à notre contrôleur (qui est en vrai une Servlet)

I
Mais quelle Servlet ? je peux en avoir plusieurs
H ©
U
Le serveur va chercher quelle Servlet est E L
associée à cette route

L MO
r e f E
A cuneh route à une Servlet ?
©
Comment associer
soit avec l’annotation @WebServlet
soit dans le fichier web.xml

H & H: Research and Training 8 / 35


Structure d’une Servlet

JEE
Mais quand cette Servlet sera exécutée ?
Quand l’utilisateur saisit une URL dans le navigateur, il envoie une
requête HTTP à notre contrôleur (qui est en vrai une Servlet)

I
Mais quelle Servlet ? je peux en avoir plusieurs
H ©
U
Le serveur va chercher quelle Servlet est E L
associée à cette route

L MO
r e f E
A cuneh route à une Servlet ?
©
Comment associer
soit avec l’annotation @WebServlet
soit dans le fichier web.xml

Commençons par créer une Servlet avec Eclipse


H & H: Research and Training 8 / 35
Première Servlet avec Eclipse

JEE

Pour créer une Servlet sous Eclipse

Faire un clic droit sur src situé dans Java Resources de notre
projet
H I ©
EL
OU
Aller dans New et choisir Servlet
M
E L par
Remplir le champ Java package:
f
h r e
org.eclipse.controller
c (par example)
Remplir©
A
le champ Class name: par un nom suffixé par le mot
Servlet : TestServlet (par example)
Cliquer sur Next

H & H: Research and Training 9 / 35


Première Servlet avec Eclipse Routage par annotation

JEE

Routage par annotation (par défaut)

On peut modifier ou supprimer l’URL Mappings. Remplaçons la


chaı̂ne existante (/TestServlet) par /mapage H I ©
U EL
Cliquer sur Next O
f E
Décocher la case Constructors from superclass LM
h r e
lesccases correspondantes aux deux méthodes
Vérifier que A
©
doGet() et doPost sont cochées
Valider en cliquant sur Finish

H & H: Research and Training 10 / 35


Première Servlet avec Eclipse Routage par annotation

JEE
Le contenu généré par Eclipse

package org.eclipse.controller;

// les imports

@WebServlet("/mapage")
H I ©
EL
public class TestServlet extends HttpServlet {

private static final long serialVersionUID = 1L;


O U
f E LM
protected void doGet(HttpServletRequest request, HttpServletResponse

r e
response) throws ServletException, IOException {
ch
©A
response.getWriter().append("Served at: ").append(request.
getContextPath());
}

protected void doPost(HttpServletRequest request, HttpServletResponse


response) throws ServletException, IOException {
doGet(request, response);
}
}

H & H: Research and Training 11 / 35


Première Servlet avec Eclipse Routage dans web.xml

JEE

Routage dans web.xml


H I ©
U EL
Le fichier web.xml situé dans WEB-INF de WebContent permet de :
déclarer la Servlet L MO
r e f E
associer une URL
A ch à une Servlet (Mapping URL/Servlet)
©

H & H: Research and Training 12 / 35


Première Servlet avec Eclipse Routage dans web.xml

JEE

Si le fichier n’existe pas


Faire un clic droit sur WEB-INF de WebContent de notre projet
H I ©
EL
Aller dans New et choisir Other
M OU
f E
Saisir xml dans la zone de L
recherche
Choisir XMLA chr
File
e
©
Cliquer sur Next et choisir le nom web.xml

H & H: Research and Training 13 / 35


Première Servlet avec Eclipse Routage dans web.xml

JEE
Contenu de web.xml

<?xml version="1.0" encoding="UTF-8"?>


<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://
H I ©
xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID"
U EL
version="3.1">
O
<display-name>cours-jee</display-name>
f E LM
<welcome-file-list>

ch r e
<welcome-file>index.html</welcome-file>

©A
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>

H & H: Research and Training 14 / 35


Première Servlet avec Eclipse Routage dans web.xml

JEE

<welcome-file-list>
Contient les différent formats fichiers qui peuvent être utilisés H I ©
comme page d’accueil de l’applicationU EL
M O
f E L dans WebContent
Ces fichiers seront directement
Pas besoin d’uneh
c re pour les afficher
Servlet
© Avia la route / ou directement via leur nom
Accessibles

H & H: Research and Training 15 / 35


Première Servlet avec Eclipse Routage dans web.xml

JEE
Dans web.xml, on déclare la Servlet avant </web-app>

...
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>org.eclipse.controller.TestServlet</servlet-
class>
H I ©
</servlet>
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 16 / 35


Première Servlet avec Eclipse Routage dans web.xml

JEE
Dans web.xml, on déclare la Servlet avant </web-app>

...
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>org.eclipse.controller.TestServlet</servlet-
class>
H I ©
</servlet>
U EL
O
f E LM
Explication
ch r e
©A
<servlet> et </servlet> : déclaration de la Servlet

<servlet-name> et </servlet-name> : permet d’attribuer un nom à la


Servlet qu’on utilisera plus tard

<servlet-class> et </servlet-class> : indique le chemin de la classe


de la Servlet

H & H: Research and Training 16 / 35


Première Servlet avec Eclipse Routage dans web.xml

JEE

Autres sous balises disponibles pour Servlet

H I ©
<description> et </description> : ajouter une description
EL
OU
sur le fonctionnement de la Servlet (comme un commentaire)
M
<load-on-startup> et
f E L
</load-on-startup> : permet de
e
chr de la Servlet lors de démarrage
forcer le chargement
... © A

H & H: Research and Training 17 / 35


Première Servlet avec Eclipse Routage dans web.xml

JEE

N’oublions pas, le rôle du web.xml :


H I ©
EL
déclarer la Servlet (c’est fait)
M OU
faire le mapping (assurer E
f L si cela n’a pas été fait avec
le routage
les annotations) hr
c e
©A

H & H: Research and Training 18 / 35


Première Servlet avec Eclipse Routage dans web.xml

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

H & H: Research and Training 19 / 35


Première Servlet avec Eclipse Routage dans web.xml

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

<url-pattern> et </url-pattern> : indique l’URL qui provoquera l’appel


de la Servlet indiquée dans la la sous-balise précédente

H & H: Research and Training 19 / 35


Première Servlet avec Eclipse Routage dans web.xml

JEE
Le contenu de web.xml

<?xml version="1.0" encoding="UTF-8"?>


<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://
H I ©
xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID"
U EL
version="3.1">
O
<servlet>
f E LM
ch r e
<servlet-name>TestServlet</servlet-name>
<servlet-class>org.eclipse.controller.TestServlet</servlet-
class>
</servlet> ©A
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/mapage</url-pattern>
</servlet-mapping>
</web-app>

H & H: Research and Training 20 / 35


Première Servlet avec Eclipse Routage dans web.xml

JEE

H I ©
Remarque
U EL
O
f E LM
Dans la suite de ce cours, on utilise que le routage par annotation.

ch r e
©A

H & H: Research and Training 21 / 35


Objet HttpServletRequest

JEE
Format d’une requête utilisateur
http://localhost:8080/nomProjetJEE/URLServlet

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 22 / 35


Objet HttpServletRequest

JEE
Format d’une requête utilisateur
http://localhost:8080/nomProjetJEE/URLServlet

H I ©
Comment récupérer ces informations
UEL
O
f E LM
request.getContextPath() : nom du projet défini par le

ch r e
serveur Apache Tomcat dans la requête

©A
request.getServletPath() : adresse de la Servlet
demandée par l’utilisateur (définie soit dans web.xml ou dans
l’annotation @WebServlet)
request.getServerPort() : numéro de port utilisé par le
serveur

H & H: Research and Training 22 / 35


Tester la Servlet

JEE

Une seule étape à faire


H I ©
Cliquer sur Run
UEL
O
Une page blanche affichée ayant comme
f E LM
r e
adresse : http://localhost:8080/cours-jee/mapage
ch
©A
contenu : Served at: /cours-jee

H & H: Research and Training 23 / 35


Tester la Servlet

JEE

Si on teste une autre URL inexistante


H I ©
UEL
Écrire dans la zone d’adresse
O
http://localhost:8080/nomProjetJEE/tapage
f E LM
ch r e
Une page HTTP 404 sera affichée
©A

H & H: Research and Training 24 / 35


Tester la Servlet

JEE

H I ©
Comment afficher le Hello World
UEL
O
LM
Il faut modifier la Servlet (l’objet HttpServletResponse qui
est responsable de la réponse)
r e f E
ch
©A

H & H: Research and Training 25 / 35


Tester la Servlet

JEE
Nouveau contenu de la Servlet

public class TestServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request,


H I ©
EL
HttpServletResponse response) throws ServletException,
IOException {
M OU
f E L
response.getWriter().print("Hello World");
}
ch r e
protected©
A
void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
doGet(request, response);
}
}

H & H: Research and Training 26 / 35


Tester la Servlet

JEE

Pour exécuter une deuxième fois


H I ©
EL
Cliquer sur Run
M OU
Choisir Continue without
f E L restarting (pas besoin de
chr e
redémarrer le serveur)

© A

H & H: Research and Training 27 / 35


Tester la Servlet

JEE
On peut indiquer l’encodage et le type du contenu de la réponse

protected void doGet(HttpServletRequest request, HttpServletResponse


response) throws ServletException, IOException {

// pour indiquer le type de réponse


response.setContentType("text/html");

H I ©
EL
// indiquer l’encodage UTF-8 pour éviter les problèmes avec les
U
accents
O
LM
response.setCharacterEncoding("UTF-8");

r e f E
PrintWriter out = response.getWriter();

ch
out.println("Hello World");
}
©A
L’objet PrintWriter

s’obtient de l’objet response

permet d’envoyer un (ou des) message(s) à l’utilisateur

H & H: Research and Training 28 / 35


Tester la Servlet

JEE
Pour retourner une page HTML complète

protected void doGet(HttpServletRequest request,


HttpServletResponse response) throws ServletException,
IOException{
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
H I ©
PrintWriter out = response.getWriter();
UEL
out.println("<!DOCTYPE html>");
O
out.println("<html>");
out.println("<head>");
f E LM
ch r e
out.println("<meta charset=\"utf-8\" />");

©A
out.println("<title>Projet JEE</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello World");
out.println("</body>");
out.println("</html>");
}

H & H: Research and Training 29 / 35


Tester la Servlet

JEE

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

H & H: Research and Training 30 / 35


Tester la Servlet

JEE

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

H & H: Research and Training 30 / 35


Paramètres de requête

JEE

Récupérer les paramètres d’une requête

Mais, une requête peut avoir de paramètres (par example


H I ©
/mapage?nom=Wick&prenom=John)
UEL
O
f E LM
Comment, dans ce cas, récupérer les paramètres ?

ch r e
©A

H & H: Research and Training 31 / 35


Paramètres de requête

JEE

Récupérer les paramètres d’une requête

Mais, une requête peut avoir de paramètres (par example


H I ©
/mapage?nom=Wick&prenom=John)
UEL
O
f E LM
Comment, dans ce cas, récupérer les paramètres ?

ch r e
Solution
©A
request.getParameter("nomParameter");

H & H: Research and Training 31 / 35


Paramètres de requête

JEE

Exemple de récupération et d’affichage de paramètres de la


requête
protected void doGet(HttpServletRequest request,
H I ©
HttpServletResponse response) throws
UEL
ServletException, IOException {
O
f E LM
r e
String nom = request.getParameter("nom");
ch
©A
String prenom = request.getParameter("prenom");
PrintWriter out = response.getWriter();
out.print("Hello " + nom + " " + prenom);
}

H & H: Research and Training 32 / 35


Paramètres de requête

Récupérer les paramètres d’une requête

À 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

H & H: Research and Training 33 / 35


Rediriger vers une autre Servlet

JEE

Rediriger vers une autre Servlet annotée par


H I ©
EL
@WebServlet("/MaServlet")
response.sendRedirect("MaServlet"); O U
f E LM
ch r e
©A
Ne pas mettre "/" avant MaServlet.

H & H: Research and Training 34 / 35


Servlet multi-routes

JEE

Pour avoir plusieurs routes qui permettent d’exécuter une Servlet


@WebServlet({"/route1", "/route2",... /routeN})
H I ©
EL
M OU
f
Dans la Servlet, pour récup E Lla route qui a conduit à
érer
chr e
l’exécution de la Servlet
© A
request.getServletPath()

H & H: Research and Training 35 / 35

Vous aimerez peut-être aussi