Vous êtes sur la page 1sur 30

Les SERVLETs

Du JSP à la servlet

L’exécution d’un script JSP sur le serveur se traduit par:


 Création d’un programme servlet équivalent
 Compilation de ce programme
 Chargement de ce programme
 Exécution automatique du programme et génération d’une
réponse sous forme d’une page HTML.

07/01/2019 -A.Y- 2
Cycles de vie d’une servlet

Une servlet passe par 6 états dont l’ensemble forme un cycle de


vie:
 Traduction
 Compilation
 Création et chargement d’un objet Servlet
 Initialisation de la servlet
 Appel de la méthode _jspService() et création des objets
request et response pour chaque requête émise par un client
 Destruction de la servlet

07/01/2019 -A.Y- 3
Du JSP à la servlet

Traitement d’une requête par une servlet:

Serveur web

Conteneur des servlets

Requête Requête ServletRequest

Client Classe servlet


Réponse Réponse ServletResponse

07/01/2019 -A.Y- 4
Première servlet

Méthodes des requêtes HTTP: GET, POST


Méthodes de la classe HttpServlet:
− init()
− service()
− destroy()
− doPost() Conteneur de servlets
− doGet()
MaServlet
1:Requête GET 2:Service() 3:Service()

Client HttpServlet
6:Réponse HTTP 5:Réponse HTTP 4:DoGet()

07/01/2019 -A.Y- 5
Première servlet
import java.io.*;
import javax.servlet.*;
public class HelloWorld extends GenericServlet {
public void service(ServletRequest requete, ServletResponse
reponse) throws IOException, ServletException{
reponse.setContentType("text/html");
PrintWriter out = reponse.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<h1>Hello World</h1>");
out.println("</body>");
out.println("</html>");
out.flush();
}
}

07/01/2019 -A.Y- 6
Première servlet (méthodologie)

L'application web helloword accessible à l'url:


http://localhost:8080/helloworld//.
doit être stockée dans le répertoire /webapps/helloworld contenant:
- directement ou dans un sous dossier les fichiers html,jsp, ...
- un sous dossier WEB-INF contenant:
- le fichier de configuration web.xml.
- un sous dossier classes qui contiendra les servlets compilées.
Les étapes à suivre pour déployer la servlet HelloWorld.java sont:
- compiler la servlet.
- placer le code HelloWorld.class dans le dossier
webapps/helloworld/WEB-INF/classes.
- mettre à jour le fichier web.xml.

07/01/2019 -A.Y- 7
Première servlet (méthodologie)
WEB-INF/web.xml: Fichier de déploiement pour le paramétrage
des servlets.

<?xml version="1.0" encoding="ISO-8859-1"?>


<web-app>
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
</web-app>

07/01/2019 -A.Y- 8
Programmation des servlets

Il faut importer des classes spéciales pour les servlets :


import javax.servlet.*;
import javax.servlet.http.*;
Une servlet implante l'interface Servlet soit directement soit en
étendant l'une des classes: Genericservlet ou HttpServlet.
Une servlet possède les méthodes:
 init(ServletConfig config) : appelée en premier au chargement de la
servlet, config est transmise par le moteur.
 service(ServletRequest req, ServletResponse rep) : pour répondre
aux requêtes et générer les réponses.
 destroy() : appelée lors de la destruction de la servlet.
 getServletInfo() : renvoie des infos sur la servlet.
 getServletConfig() : renvoie un objet de type ServletConfig.

07/01/2019 -A.Y- 9
Cycle de vie d'une servlet

 Chargement du code par le conteneur et création d'une


instance de la servlet lors du premier appel à la servlet.
 Exécution unique de la méthode init() de l'instance créée
 Exécution de la méthode service() à chaque requête de
clients.
 Attention aux accès concurrents.

 Traitement de requêtes (méthode service()).


 Exécution unique de la méthode destroy(), libération des
ressources créées par init() et suppression de l'instance (lors
de l'arrêt de l'application).
Cycle de vie d'une servlet

init()
Créée Initialisée
service()
destroy()
Détruite En service
 init(): méthode appelée une seule fois par le serveur dans la vie d’une
servlet et juste après son initialisation.
 service(ServletRequest, ServletResponse): appelée par le serveur
chaque fois que la servlet est invoquée. Chaque requête du client
déclenche une seule exécution de cette méthode.
 destroy(): appelée une seule fois par le serveur dans la vie d’une
servlet, lors de sa destruction. Elle permet de libérer certaines
ressources (fichiers, bases de données,…)

07/01/2019 -A.Y- 11
Servlet générique

 Une servlet qui hérite de GenericServlet est une servlet


indépendante du protocole utilisé (http, ftp, …).
public class HelloWorld extends GenericServlet{

 Elle doit implémenter la méthode service qui reste le principal


point d'entrée du client vers le serveur.
public void service(ServletRequest requete, ServletResponse
reponse) throws IOException, ServletException{

 Package: javax.servlet

07/01/2019 -A.Y- 12
HTTP Servlet

 Une servlet qui hérite de HttpServlet est une servlet qui


répond uniquement aux requêtes utilisant protocole http.

 Elle doit implémenter la méthode service qui reste le principal


point d'entrée du client vers le serveur. Cette méthode appelle
la méthode adéquate en fonction de la requête http effectuée:
 doGet: pour traiter la requête GET

 doPost: pour traiter la requête POST

 doHead, doTrace,…

 Package: javax.servlet.http

07/01/2019 -A.Y- 13
Programmation de http servlet

 Une servlet dérive de la classe HttpServlet:


public class HelloWorld extends HttpServlet {
 Une requête GET envoyée à la servlet est traitée par la
méthode doGet:
public void doGet(HttpServletRequest requete,
HttpServletResponse reponse) throws IOException,
ServletException{
 Une requête POST est traitée par la méthode doPost:
public void doPost(HttpServletRequest requete,
HttpServletResponse reponse) throws IOException,
ServletException{

07/01/2019 -A.Y- 14
Programmation de http servlet
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class DateServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse rep) throws
ServletException, IOException {
PrintWriter out = rep.getWriter();
out.println("<html><head><title>Bonjour</title></head>");
out.println("<body><h1> Bonjour à tous </h1>");
out.println("<h2>Il est : "+new java.util.Date().toLocaleString()+"</h2>");
out.println("</body></html>");
rep.setHeader("refresh","1");
}
public void doPost(HttpServletRequest req, HttpServletResponse rep) throws
ServletException, IOException {
doGet(req, rep);
}
}
07/01/2019 -A.Y- 15
L’interface HttpServletRequest

L'objet HttpServletRequest requete est l'objet qui nous donne la


possibilité d’accéder à la requête envoyée par le client Web.
Il contient les informations sur la requête qui a sollicité la servlet
(tout ce qui provient du navigateur).
Il permet de récupérer les paramètres d’un formulaire envoyés par
POST ou GET.
 getParameter(String param): retourne la chaîne de caractères égale
à la 1ère valeur (si elle existe) du paramètre param.
 getParametersValue(String param): retourne le tableau de chaîne
de caractères des valeurs du paramètre param.
 getParameterNames(): retourne un objet Enumeration contenant la
liste des noms des paramètres envoyés.
 getRemoteHost(): retourne l‘adresse IP du client.

07/01/2019 -A.Y- 16
L’interface HttpServletRequest

Autres méthodes:
 String getRemoteAddr() int getServerPort()
 String getMethod() String getServerName()
 String getPathInfo() String getRequestURL()
 String getQueryString()

 String getRequestURI()

 String getServletPath()

 String getContextPath()

 Cookie[] getCookies()

 HttpSession getSession(boolean)

 boolean isRequestedSessionIdValid()

 Enumeration getHeaderNames()
L’interface HttpServletResponse

 La réponse de la servlet se fait via l'objet HttpServletResponse


reponse. Cet objet permet de définir tout ce que l'on va envoyer
au navigateur du client.
 L'objet reponse nous permet de fixer les entêtes http qui seront
envoyés au client. Par exemple l'entête Content-type: text/html
est ici fixé par :
response.setContentType("text/html");
 Pour envoyer la réponse au client, la servlet utilise un flux de
sortie que lui délivre l'objet reponse :
ServletOutputStream out= reponse. getOutputStream();
Ou bien:
PrintWriter out = response.getWriter();

07/01/2019 -A.Y- 18
L’interface HttpServletResponse

Autres méthodes:
 void sendRedirect(String).

 void sendError(int [ , String ])

 void setStatus()

 void setHeader()

 void setContentLength()

 String encodeURL (String)

 String encodeRedirectURL (String)

 void addCookie(Cookie)

07/01/2019 -A.Y- 19
La session HttpSession

L’interface HttpSession défini un objet qui représente une


session.
Quelques méthodes:
 getId(): retourne l’identifiant unique de la session.

 Object getAttribue(String): retourne la valeur attribuée à un


objet dont le nom est passé en argument.
 setAttribute(String, Object): stocke dans la session l’objet
passé en 2ème paramètre, en lui associant un nom passé en
1er paramètre de la méthode.
 long getCreationTime(): date de création. (nombre de ms
depuis 01/01/1970 00:00:00)

07/01/2019 -A.Y- 20
La session HttpSession

 long getLastAccessedTime(): date du dernier accès.


 void removeAttribute(String): supprime un objet de la session.
 Enumeration getAttributeNames(): retourne toutes les valeurs
(objets) enregistrées dans la session.
 logout(): termine la session (destruction).
 invalidate(): expire la session (destruction).
 isNew()…

Création d’une session:


HttpSession session = requete.getSession(true);

07/01/2019 -A.Y- 21
La session HttpSession

Exemple:
HttpSession session = req.getSession(true);
// la session est récupérée ou ouverte s’elle n’existait pas déjà.
/** Ou bien
*HttpSession session = req.getSession(true);
*la session est récupérée ou null s’elle n’existait pas déjà.
*/
if(session.getLastAccessedTime() - session.getCreationTime()
>5*60*1000 ) {
session.invalidate();
}

07/01/2019 -A.Y- 22
Récupérer les entêtes HTTP d'un client web

public class RecupererEntete extends HttpServlet {


public void doGet(HttpServletRequest req, HttpServletResponse rep)
throws IOException, ServletException {
rep.setContentType("text/html");
PrintWriter out = rep.getWriter();
Enumeration elems = req.getHeaderNames();
while (elems.hasMoreElements()) {
String name = (String)elems.nextElement();
String value = req.getHeader(name);
out.println("<b>"+name + "</b> = " + value + "<br>");
}
}
public void doPost(HttpServletRequest req, HttpServletResponse rep)
throws IOException, ServletException
{
doGet(req,rep);
}
}

07/01/2019 -A.Y- 23
L’initialisation de la servlet
Récupération des paramètres d ’initialisation: WEB-INF/web.xml
<servlet>
<servlet-name>UneServlet</servlet-name>
<servlet-class>UneServlet</servlet-class>
<init-param>
<param-name>langue</param-name>
<param-value>Arabe</param-value>
</init-param>
<init-param>
<param-name>pays</param-name>
<param-value>Maroc</param-value>
</init-param>
</servlet>
07/01/2019 -A.Y- 24
Récupérer les paramètres d’initialisation

public class UneServlet extends GenericServlet {


Enumeration e;
public void service(ServletRequest req, ServletResponse rep) throws
IOException, ServletException{
PrintWriter out=rep.getWriter();
out.println("Servlet: paramètres d’initialisation<br>");
e = this.getInitParameterNames();
while (e.hasMoreElements()) {
String clé= (String)e.nextElement(); String value = getInitParameter(clé);
out.println(clé+ " = " + value+”<br>”);
}
}
}
07/01/2019 -A.Y- 25
Collaboration servlets/JSP

 On met dans une ou plusieurs servlets, le code Java qui ne génère


pas le code HTML de la réponse.
 dans des pages JSP, on met le code de génération des différents
documents HTML envoyés en réponse au client.
Quelques méthodes à utiliser:
- [ServletContext].getRequestDispatcher(String url): méthode de la
classe ServletContext qui rend un objet RequestDispatcher. Le
paramètre url est le nom de l'URL à qui on veut transmettre la
requête du client.
- [RequestDispatcher].forward(ServletRequest req, ServletResponse
rep): méthode de l'interface RequestDispatcher qui transmet à l'URL
précédente la requête req du client et l'objet rep qui doit être utilisé
pour élaborer la réponse.

07/01/2019 -A.Y- 26
Collaboration servlets/JSP
 [ServletRequest].setAttribute(String nom, Object obj): lorsqu'une
servlet ou page JSP passe une requête à une autre servlet ou page
JSP, elle a en général besoin de passer à celle-ci d'autres
informations que la seule requête du client, informations issues de
son propre travail sur la requête.
 [ServletRequest].getAttribute(String attribut): permet de récupérer
les valeurs des attributs d'une requête.

07/01/2019 -A.Y- 27
Communication Applet - Servlet

Exemple d’application:
Développement d’une applet pour l’authentification.
Développement d’un servlet qui communique avec l’applet et
vérifie d’authentification du client.

07/01/2019 -A.Y- 28
Communication Applet - Servlet

Cet exemple est constitué de trois éléments: une page html, une applet et
une servlet.
- La page html contient l’applet dont l’interface graphique se compose de:
- 2 zones de texte pour saisir le nom de l’utilisateur et sont mot de passe.
- 2 boutons, un pour invoquer la servlet et l’autre pour la réinitialisation des
éléments de la fenêtre.
- La servlet définie 4 méthodes:
- init qui instancie la connexion à la base de données. Ainsi la servlet utilise
une seule connexion, initialisée une seule fois pour toute au moment de
chargement de la servlet.
- doGet qui exécute la requête récupérée et qui renvoie le résultat issu de la
base de données dans un flux de sortie.
- doPost qui redirige la requête vers la méthode doGet
- destroy qui finie et libère la connexion lors du déchargement de la servlet
en mémoire.

07/01/2019 -A.Y- 29
07/01/2019 -A.Y- 30

Vous aimerez peut-être aussi