J2EE
Dr. Mohammed ERRITALI
Architecture 1-tiers
Présentation
Traitement
données
Navigateur
Serveur
Web
Systèm
e de
fichiers
Architecture 2-tiers
Présentation
Traitement
données
Navigateur
Serveur
Web
Base de
données
Base de
données
Architecture 3-tiers
Présentation
Traitement
données
Navigate
ur
Serveur
Web
Base de
données
Base de
données
Serveur
d’application
s
Le modèle d’application de J2EE
La communications entre le client
et le serveur
Les « containers » J2EE
 Les applications multi-tiers sont difficiles à écrire
 Beaucoup de code entrelacé pour gérer les
transactions, l’état, le pooling des ressources, etc.
 Container
 Sert d’interface entre les fonctionalités de bas niveau
qui sont spécifiques à une plateforme
 Avant de pouvoir exécuter un composant web,
EJB ou d’application client
 L’assembler dans un module J2EE
 Le déployer dans son conteneur
Types de containers
Types de containers
 Le container serveur J2EE
 Fournit les containers web et EJB
 Le container EJB
 Gère l’exécution des EJB
 Le container Web
 Gère l’exécution des pages JSP et des servlets
 Le container d’applets
 Browser + Java plug-in
Exemples de conteneurs
Serveurs J2EE
JBoss : http://www.jboss.org
Glassfish : https://glassfish.dev.java.net/
JOnAS:http://wiki.jonas.objectweb.org/xwiki/bin/view/Main/WebHome
Oracle AS : http://www.oracle.com/appserver/index.html
Conteneur Web
Tomcat : http://www.apache.org
Jetty : http://jetty.mortbay.org/jetty/index.html
Conteneur EJB3
EasyBeans:http://www.easybeans.net/xwiki/bin/view/Main/WebHome
API J2EE
 J2EE (Java 2 Edition Enterprise) propose les API :
• L'invocation de méthodes distantes : RMI, CORBA, Web Services
• L'accés aux bases de données relationnelles : JDBC
• L'accés aux annuaires et services de nommage : JNDI
• L'utilisation du XML : DOM et SAX
• HTML dynamique et traitement de requêtes HTTP : JSP et Servlet
• La gestion du Mail : Java Mail
• La gestion des messages : Java Message Service
• La gestion des composants : EJB
• La connection à des ERP : Java Connector
• La gestion des droits d'accès : Java Authentication and
Authorization Service
Servlets
Rappel :LE PROTOCOLE HTTP
 HTTP :HyperText Tranfert Protocol
(RFC 1945 et 2068)
 Protocole de rapatriement des documents
 Protocole de soumission de formulaires
 Fonctionnement (très simple en HTTP/1.0)
 Connexion
 demande (GET, POST) d’un document
 renvoi du document (status=200) ou d’une
erreur
 déconnexion
Dialogue HTTP
 Types de dialogue
 Récupération d’un document
 méthode GET
 Soumission d’un formulaire
 méthodes GET ou POST
 Envoi de Document et Gestion de Site
 méthodes PUT, DELETE
 Méthode HEAD (Récupération des infos sur le
document).
Le client envoie la requête : Méthode POST
Post /Nom_Script HTTP/1.0
host: www.intra.net
HTTP_ACCEPT_LANGUAGE : fr
User-Agent : Mozilla/4.0
*** saut de ligne ***
login=Value1& pass=Value2
& Var3=Value3
Entête de la requête
corps de la requête
Méthode,chemin,version
Nom de domaine
Code de la langue
Type et version du
navigateur
Paramètres des différents
champs du formulaire.
Le client envoie la requête : Méthode GET
GET /Nom_Script?login=val1&pass=val2&…. HTTP/1.0
host: www.intra.net
HTTP_ACCEPT_LANGUAGE : fr
User-Agent : Mozilla/4.0
Entête de la requête
corps de la requête est vide
Le Serveur retourne la réponse :
HTTP/1.0 200 OK
Date : Wed, 05Feb02 15:02:01 GMT
Server : Apache/1.3.24
Last-Modified : Wed 02Oct01 24:05:01GMT
Content-Type : Text/html
Content-legnth : 4205
*** saut de ligne ***
<HTML><HEAD>
….
</BODY></HTML>
Entête de la réponse
corps de la réponse
Ligne de Status
Date du serveur
Nom du Serveur
Dernière modification
Type de contenu
Sa taille
Le fichier que le client
va afficher
Introduction aux servlets
 Une servlet est une classe Java , exécutée
par un moteur de servlets, fonctionnant du
côté serveur au même titre que les
langages de script côté serveur tels que
ASP ou bien PHP
 Les servlets permettent donc de gérer des
requêtes HTTP et de fournir au client une
réponse HTTP dynamique.
Architecture du
package servlet.jar
 Toutes les servlets implémentent
directement ou indirectement l'interface
Servlet, en dérivant une classe qui
l'implémente: c'est-à-dire généralement la
classe HttpServlet, elle-même issue de
GenericServlet.
 La classe GenericServlet
(javax.servlet.GenericServlet) définit une
classe abstraite (implémentation de base
de l'interface Servlet).
Servlet
GenericSrvlet
service()
HttpServlet
doPost()
doGet()
NotreServlet
doPost()
doGet()
Gestion des servlets
Moteur de
Servlets
Réponse HTTP 1
Réponse HTTP 2
Thread Thread
Créer un pool
de threads
Servlet
Instancier la servlet
Appeler la méthode init()
Requête HTTP 2
Affecter une requête à un thread
Requête HTTP 1
Affecter une requête à un thread Appeler la méthode service()
Appeler la méthode service()
Appeler la méthode destroy()
Terminer le pool de threads
Initialisation
Exécution
service
Exécution
service
Cycle de vie d’une servlet
 Le serveur crée un pool de threads auxquels il va pouvoir affecter
chaque requête
 La servlet est chargée au démarrage du serveur ou lors de la
première requête
 La servlet est instanciée par le serveur
 La méthode init() est invoquée par le conteneur
 Lors de la première requête, le conteneur crée les objets Request
et Response spécifiques à la requête
 La méthode service() est appelée à chaque requête dans un
nouveau thread. Les objets Request et Response lui sont passés en
paramètre
 Grâce à l'objet request, la méthode service() va pouvoir analyser
les informations en provenance du client
 Grâce à l'objet response, la méthode service() va fournir une
réponse au client
 La méthode destroy() est appelée lors du déchargement de la
servlet, c'est-à-dire lorsqu'elle n'est plus requise par le serveur. La
servlet est alors signalée au garbage collector .
Fonctionnement d’une servlet
 Lorsqu'une servlet est appelée par un
client, la méthode service() est exécutée.
Celle-ci est le principal point d'entrée de
toute servlet et accepte deux objets en
paramètres:
 L'objet HttpServletRequest encapsulant la
requête du client, c'est-à-dire qu'il contient
l'ensemble des paramètres passés à la servlet
(informations sur l'environnement du client,
cookies du client, URL demandée, ...)
 L'objet HttpServletResponse permettant de
renvoyer une réponse au client (envoyer des
informations au navigateur).
Développement d’une servlet
 Afin de développer un servlet fonctionnant avec le
protocole HTTP, il suffit de créer une classe étendant
HttpServlet (qui implémente elle-même l'interface
Servlet).
 La classe HttpServlet (dérivant de GenericServlet)
permet de fournir une implémentation de l'interface
Servlet spécifique à HTTP.
 La classe HttpServlet redéfinit la méthode service en
lisant la méthode HTTP utilisée par le client, puis en
redirigeant la requête vers une méthode appropriée.
 Les deux principales méthodes du protocole HTTP
étant GET et POST, il suffit de redéfinir la méthode
adéquate afin de traiter la requête :
Développement d’une servlet
 Si la méthode utilisée est GET, il suffit de
redéfinir la méthode :
 public void doGet(
HttpServletRequest request,
HttpServletResponse response
)
 Si la méthode utilisée est POST, il suffit de
redéfinir la méthode :
 public void doPost(
HttpServletRequest request,
HttpServletResponse response
)
HttpServletRequest
Méthode Description
String getMethod()
Récupère la méthode HTTP utilisée par le
client
String getHeader(String Key)
Récupère la valeur de l'attribut Key de l'en-
tête
String getRemoteHost() Récupère le nom de domaine du client
String getRemoteAddr() Récupère l'adresse IP du client
String getParameter(String
Key)
Récupère la valeur du paramètre
Key (clé) d'un formulaire.
Lorsque plusieurs valeurs sont
présentes, la première est
retournée
String[] getParameterValues(String
Key)
Récupère les valeurs correspondant au
paramètre Key (clé) d'un formulaire,
c'est-à-dire dans le cas d'une sélection
multiple (cases à cocher, listes à choix
multiples) les valeurs de toutes les entités
sélectionnées
Enumeration getParameterNames()
Retourne un objet Enumeration contenant la
liste des noms des paramètres passés à la
requête
String getServerName() Récupère le nom du serveur
String getServerPort() Récupère le numéro de port du serveur
HttpServletResponse
Méthode Description
String setStatus(int StatusCode) Définit le code de retour de la réponse
void setHeader(String Nom, String Valeur) Définit une paire clé/valeur dans les en-têtes
void setContentType(String
type)
Définit le type MIME de la réponse
HTTP, c'est-à-dire le type de
données envoyées au navigateur
void setContentLength(int len) Définit la taille de la réponse
PrintWriter getWriter()
Retourne un objet PrintWriter
permettant d'envoyer du texte au
navigateur client. Il se charge de
convertir au format approprié les
caractères Unicode utilisés par Java
ServletOutputStream getOutputStream()
Définit un flot de données à envoyer au client, par
l'intermédiaire d'un objet ServletOutputStream, dérivé de
la classe java.io.OutputStream
Première Servlet
package web;
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE> Titre </TITLE></HEAD>");
out.println("<BODY>");
out.println("Ma première servlet");
out.println("</BODY>");
out.println("</HTML>");
out.close();
}
}
Déploiement d’une servlet
 Pour que le serveur j2ee reconnaisse une servlet,
celle-ci doit être déclarée dans le fichier web.xml
qui se trouve dans le dossier WEB-INF.
 Le fichier web.xml s’appelle le descripteur de
déploiement de Servlet.
 Ce descripteur doit déclarer principalement les
éléments suivant :
 Le nom attribué à cette servlet
 La classe de la servlet
 Le nom URL à utiliser pour faire appel à cette servlet
via le protocole HTTP.
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/fs</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
A vous de jouer
TP
Suivi de session
 Le protocole HTTP est un protocole sans état
 impossibilité alors de garder des informations d’une
requête à l’autre (identifier un client d’un autre)
 Obligation d’utiliser différentes solutions pour remédier
au problème d’état
• Cookies persistants
• session
Cookies persistants : Cookie
 Un cookie est une information envoyée au navigateur
(client) par un serveur WEB qui peut ensuite être relue
par le client
 lorsqu’un client reçoit un cookie, il le sauve et le renvoie
ensuite au serveur chaque fois qu’il accède à une page
sur serveur
 La valeur d’un cookie pouvant identifier de façon unique
un client, ils sont souvent utilisés pour le suivi de
session
 Les cookies ont été introduits par la première fois dans
Netscape Navigator
 L’API Servlet fournit la classe javax.servlet.http.Cookie
pour travailler avec les Cookies
Cookie(String name, String value): construit un
cookie
String getName(): retourne le nom du cookie
String getValue(): retourne la valeur du cookie
setValue(String new_value): donne une nouvelle
valeur au cookie
setMaxAge(int expiry): spécifie l’âge maximum du
cookie
 Pour la création d’un nouveau cookie, il faut l’ajouter à
la réponse (HttpServletResponse)
addCookie(Cookie mon_cook): ajoute à la réponse un
cookie
 La Servlet récupère les cookies du client en exploitant la
réponse (HttpServletRequest)
Cookie[] getCookies(): récupère l’ensemble des
cookies du site
 Code pour créer un cookie et l’ajouter au client
 Code pour récupérer les cookies
Exemple : gestion de session (identifier un client
d’un autre)par l’intermédiaire des cookies
persistants
Session : HttpSession
 Solution 2: utilisation de l’API de suivi de session
HttpSession
 Méthodes de création liées à la requête
(HttpServletRequest)
HttpSession getSession() : retourne la session associée à
l’utilisateur
HttpSession getSession(boolean p) : création selon la valeur
de p
 Gestion d’association (HttpSession)
Enumeration getAttributNames() : retourne les noms
de tous les attributs
Object getAttribut(String name): retourne l’objet
associé au nom
setAttribut(String na, Object va): modifie napar la
valeur va
removeAttribut(String na): supprime l’attribut associé à
na
 Destruction (HttpSession)
invalidate() : expire la session
logout() : termine la session
Exemple : suivi de session pour un
compteur
Collaboration de Servlets
 Les Servlets s’exécutant dans le même serveur peuvent
dialoguer entre elles
 Deux principaux styles de collaboration:
 partage d’information : un état ou une ressource.
Exemple : un magasin en ligne pourrait partager les
informations sur le stock des produits ou une connexion
à une base de données
 Partage du contrôle: une requête.
Réception d’une requête par une Servlet et laisser l’autre
Servlet une partie ou toute la responsabilité du
traitement
 La collaboration est obtenue par l’interface ServletContext
 Une Servlet retrouve le ServletContext de son application
web par un appel à getServletContext()
 Exemples de méthodes:
 void setAttribute(String name, Object o) : lie un objet sous
le nom indiqué
 Object getAttribute(String name) : retrouve l’objet sous le
nom indiqué
 Enumeration getAttributeNames() : retourne l’ensemble
des noms de tous les attributs liés
 void removeAttribute(String name) : supprime l’objet lié
sous le nom indiqué
Collaboration de Servlets : partage du
contrôle
 Deux types de distribution
 Distribuer un renvoi : une Servlet peut
renvoyer une requête entière
 Distribuer une inclusion : une Servlet peut
inclure du contenu généré
 Les avantages sont
 La délégation de compétences
 Architecture logicielle MVC (Servlet = contrôle
et JSP = présentation)
 Le support de la délégation de requête est obtenu par
l’interface RequestDispatcher
 Une Servlet obtient une instance sur la requête
 RequestDispatcher getRequestDispatcher(String path):
retourne une instance de type RequestDispatcher par rapport
à un composant
 Un composant peut-être de tout type : Servlet, JSP, fichier
statique, …
 path est un chemin relatif ou absolu ne pouvant pas sortir du
contexte
 Pour distribuer en dehors du contexte courant il faut :
 Identifier le contexte extérieur (utilisation de getContext())
 Utiliser la méthode getRequestDispatcher(String path)
Partage du contrôle : distribuer
un renvoi
 La méthode forward(...)de l’interface RequestDispatcher
renvoie une requête d’une Servlet à une autre ressource
sur le serveur
 void forward(ServletRequest req,
ServletResponse res): redirection de requête
Exemple : distribuer un renvoi
de Emetteur à Recepteur
Partage du contrôle : distribuer
une inclusion
 La méthode include(…)de l’interface RequestDispatcher inclut
le contenu d’une ressource dans la réponse courante
 La différence avec une distribution par renvoi est :
 la Servlet appelante garde le contrôle de la réponse
 elle peut inclure du contenu avant et après le contenu inclus
 Possibilité de transmettre des informations lors de l’inclusion:
 en attachant une chaîne d’interrogation (au travers de l’URL)
 en utilisant les attributs de requête via la méthode
setAttribute(...)
Exemple : permet de distribuer
une inclusion
A vous de jouer
TP

MEDBOULARESSMPIIIIIIIIIIIIIIIIIIIIIII.ppt

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
    La communications entrele client et le serveur
  • 7.
    Les « containers» J2EE  Les applications multi-tiers sont difficiles à écrire  Beaucoup de code entrelacé pour gérer les transactions, l’état, le pooling des ressources, etc.  Container  Sert d’interface entre les fonctionalités de bas niveau qui sont spécifiques à une plateforme  Avant de pouvoir exécuter un composant web, EJB ou d’application client  L’assembler dans un module J2EE  Le déployer dans son conteneur
  • 8.
  • 9.
    Types de containers Le container serveur J2EE  Fournit les containers web et EJB  Le container EJB  Gère l’exécution des EJB  Le container Web  Gère l’exécution des pages JSP et des servlets  Le container d’applets  Browser + Java plug-in
  • 10.
    Exemples de conteneurs ServeursJ2EE JBoss : http://www.jboss.org Glassfish : https://glassfish.dev.java.net/ JOnAS:http://wiki.jonas.objectweb.org/xwiki/bin/view/Main/WebHome Oracle AS : http://www.oracle.com/appserver/index.html Conteneur Web Tomcat : http://www.apache.org Jetty : http://jetty.mortbay.org/jetty/index.html Conteneur EJB3 EasyBeans:http://www.easybeans.net/xwiki/bin/view/Main/WebHome
  • 11.
    API J2EE  J2EE(Java 2 Edition Enterprise) propose les API : • L'invocation de méthodes distantes : RMI, CORBA, Web Services • L'accés aux bases de données relationnelles : JDBC • L'accés aux annuaires et services de nommage : JNDI • L'utilisation du XML : DOM et SAX • HTML dynamique et traitement de requêtes HTTP : JSP et Servlet • La gestion du Mail : Java Mail • La gestion des messages : Java Message Service • La gestion des composants : EJB • La connection à des ERP : Java Connector • La gestion des droits d'accès : Java Authentication and Authorization Service
  • 12.
  • 13.
    Rappel :LE PROTOCOLEHTTP  HTTP :HyperText Tranfert Protocol (RFC 1945 et 2068)  Protocole de rapatriement des documents  Protocole de soumission de formulaires  Fonctionnement (très simple en HTTP/1.0)  Connexion  demande (GET, POST) d’un document  renvoi du document (status=200) ou d’une erreur  déconnexion
  • 14.
    Dialogue HTTP  Typesde dialogue  Récupération d’un document  méthode GET  Soumission d’un formulaire  méthodes GET ou POST  Envoi de Document et Gestion de Site  méthodes PUT, DELETE  Méthode HEAD (Récupération des infos sur le document).
  • 15.
    Le client envoiela requête : Méthode POST Post /Nom_Script HTTP/1.0 host: www.intra.net HTTP_ACCEPT_LANGUAGE : fr User-Agent : Mozilla/4.0 *** saut de ligne *** login=Value1& pass=Value2 & Var3=Value3 Entête de la requête corps de la requête Méthode,chemin,version Nom de domaine Code de la langue Type et version du navigateur Paramètres des différents champs du formulaire.
  • 16.
    Le client envoiela requête : Méthode GET GET /Nom_Script?login=val1&pass=val2&…. HTTP/1.0 host: www.intra.net HTTP_ACCEPT_LANGUAGE : fr User-Agent : Mozilla/4.0 Entête de la requête corps de la requête est vide
  • 17.
    Le Serveur retournela réponse : HTTP/1.0 200 OK Date : Wed, 05Feb02 15:02:01 GMT Server : Apache/1.3.24 Last-Modified : Wed 02Oct01 24:05:01GMT Content-Type : Text/html Content-legnth : 4205 *** saut de ligne *** <HTML><HEAD> …. </BODY></HTML> Entête de la réponse corps de la réponse Ligne de Status Date du serveur Nom du Serveur Dernière modification Type de contenu Sa taille Le fichier que le client va afficher
  • 18.
    Introduction aux servlets Une servlet est une classe Java , exécutée par un moteur de servlets, fonctionnant du côté serveur au même titre que les langages de script côté serveur tels que ASP ou bien PHP  Les servlets permettent donc de gérer des requêtes HTTP et de fournir au client une réponse HTTP dynamique.
  • 19.
    Architecture du package servlet.jar Toutes les servlets implémentent directement ou indirectement l'interface Servlet, en dérivant une classe qui l'implémente: c'est-à-dire généralement la classe HttpServlet, elle-même issue de GenericServlet.  La classe GenericServlet (javax.servlet.GenericServlet) définit une classe abstraite (implémentation de base de l'interface Servlet). Servlet GenericSrvlet service() HttpServlet doPost() doGet() NotreServlet doPost() doGet()
  • 20.
    Gestion des servlets Moteurde Servlets Réponse HTTP 1 Réponse HTTP 2 Thread Thread Créer un pool de threads Servlet Instancier la servlet Appeler la méthode init() Requête HTTP 2 Affecter une requête à un thread Requête HTTP 1 Affecter une requête à un thread Appeler la méthode service() Appeler la méthode service() Appeler la méthode destroy() Terminer le pool de threads Initialisation Exécution service Exécution service
  • 21.
    Cycle de vied’une servlet  Le serveur crée un pool de threads auxquels il va pouvoir affecter chaque requête  La servlet est chargée au démarrage du serveur ou lors de la première requête  La servlet est instanciée par le serveur  La méthode init() est invoquée par le conteneur  Lors de la première requête, le conteneur crée les objets Request et Response spécifiques à la requête  La méthode service() est appelée à chaque requête dans un nouveau thread. Les objets Request et Response lui sont passés en paramètre  Grâce à l'objet request, la méthode service() va pouvoir analyser les informations en provenance du client  Grâce à l'objet response, la méthode service() va fournir une réponse au client  La méthode destroy() est appelée lors du déchargement de la servlet, c'est-à-dire lorsqu'elle n'est plus requise par le serveur. La servlet est alors signalée au garbage collector .
  • 22.
    Fonctionnement d’une servlet Lorsqu'une servlet est appelée par un client, la méthode service() est exécutée. Celle-ci est le principal point d'entrée de toute servlet et accepte deux objets en paramètres:  L'objet HttpServletRequest encapsulant la requête du client, c'est-à-dire qu'il contient l'ensemble des paramètres passés à la servlet (informations sur l'environnement du client, cookies du client, URL demandée, ...)  L'objet HttpServletResponse permettant de renvoyer une réponse au client (envoyer des informations au navigateur).
  • 23.
    Développement d’une servlet Afin de développer un servlet fonctionnant avec le protocole HTTP, il suffit de créer une classe étendant HttpServlet (qui implémente elle-même l'interface Servlet).  La classe HttpServlet (dérivant de GenericServlet) permet de fournir une implémentation de l'interface Servlet spécifique à HTTP.  La classe HttpServlet redéfinit la méthode service en lisant la méthode HTTP utilisée par le client, puis en redirigeant la requête vers une méthode appropriée.  Les deux principales méthodes du protocole HTTP étant GET et POST, il suffit de redéfinir la méthode adéquate afin de traiter la requête :
  • 24.
    Développement d’une servlet Si la méthode utilisée est GET, il suffit de redéfinir la méthode :  public void doGet( HttpServletRequest request, HttpServletResponse response )  Si la méthode utilisée est POST, il suffit de redéfinir la méthode :  public void doPost( HttpServletRequest request, HttpServletResponse response )
  • 25.
    HttpServletRequest Méthode Description String getMethod() Récupèrela méthode HTTP utilisée par le client String getHeader(String Key) Récupère la valeur de l'attribut Key de l'en- tête String getRemoteHost() Récupère le nom de domaine du client String getRemoteAddr() Récupère l'adresse IP du client String getParameter(String Key) Récupère la valeur du paramètre Key (clé) d'un formulaire. Lorsque plusieurs valeurs sont présentes, la première est retournée String[] getParameterValues(String Key) Récupère les valeurs correspondant au paramètre Key (clé) d'un formulaire, c'est-à-dire dans le cas d'une sélection multiple (cases à cocher, listes à choix multiples) les valeurs de toutes les entités sélectionnées Enumeration getParameterNames() Retourne un objet Enumeration contenant la liste des noms des paramètres passés à la requête String getServerName() Récupère le nom du serveur String getServerPort() Récupère le numéro de port du serveur
  • 26.
    HttpServletResponse Méthode Description String setStatus(intStatusCode) Définit le code de retour de la réponse void setHeader(String Nom, String Valeur) Définit une paire clé/valeur dans les en-têtes void setContentType(String type) Définit le type MIME de la réponse HTTP, c'est-à-dire le type de données envoyées au navigateur void setContentLength(int len) Définit la taille de la réponse PrintWriter getWriter() Retourne un objet PrintWriter permettant d'envoyer du texte au navigateur client. Il se charge de convertir au format approprié les caractères Unicode utilisés par Java ServletOutputStream getOutputStream() Définit un flot de données à envoyer au client, par l'intermédiaire d'un objet ServletOutputStream, dérivé de la classe java.io.OutputStream
  • 27.
    Première Servlet package web; importjava.io.*; import javax.servlet.ServletException; import javax.servlet.http.*; public class FirstServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML>"); out.println("<HEAD><TITLE> Titre </TITLE></HEAD>"); out.println("<BODY>"); out.println("Ma première servlet"); out.println("</BODY>"); out.println("</HTML>"); out.close(); } }
  • 28.
    Déploiement d’une servlet Pour que le serveur j2ee reconnaisse une servlet, celle-ci doit être déclarée dans le fichier web.xml qui se trouve dans le dossier WEB-INF.  Le fichier web.xml s’appelle le descripteur de déploiement de Servlet.  Ce descripteur doit déclarer principalement les éléments suivant :  Le nom attribué à cette servlet  La classe de la servlet  Le nom URL à utiliser pour faire appel à cette servlet via le protocole HTTP.
  • 29.
    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-appversion="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <servlet-name>FirstServlet</servlet-name> <servlet-class>FirstServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FirstServlet</servlet-name> <url-pattern>/fs</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> </web-app>
  • 31.
    A vous dejouer TP
  • 32.
    Suivi de session Le protocole HTTP est un protocole sans état  impossibilité alors de garder des informations d’une requête à l’autre (identifier un client d’un autre)  Obligation d’utiliser différentes solutions pour remédier au problème d’état • Cookies persistants • session
  • 33.
    Cookies persistants :Cookie  Un cookie est une information envoyée au navigateur (client) par un serveur WEB qui peut ensuite être relue par le client  lorsqu’un client reçoit un cookie, il le sauve et le renvoie ensuite au serveur chaque fois qu’il accède à une page sur serveur  La valeur d’un cookie pouvant identifier de façon unique un client, ils sont souvent utilisés pour le suivi de session  Les cookies ont été introduits par la première fois dans Netscape Navigator
  • 34.
     L’API Servletfournit la classe javax.servlet.http.Cookie pour travailler avec les Cookies Cookie(String name, String value): construit un cookie String getName(): retourne le nom du cookie String getValue(): retourne la valeur du cookie setValue(String new_value): donne une nouvelle valeur au cookie setMaxAge(int expiry): spécifie l’âge maximum du cookie
  • 35.
     Pour lacréation d’un nouveau cookie, il faut l’ajouter à la réponse (HttpServletResponse) addCookie(Cookie mon_cook): ajoute à la réponse un cookie  La Servlet récupère les cookies du client en exploitant la réponse (HttpServletRequest) Cookie[] getCookies(): récupère l’ensemble des cookies du site
  • 36.
     Code pourcréer un cookie et l’ajouter au client  Code pour récupérer les cookies
  • 37.
    Exemple : gestionde session (identifier un client d’un autre)par l’intermédiaire des cookies persistants
  • 38.
    Session : HttpSession Solution 2: utilisation de l’API de suivi de session HttpSession  Méthodes de création liées à la requête (HttpServletRequest) HttpSession getSession() : retourne la session associée à l’utilisateur HttpSession getSession(boolean p) : création selon la valeur de p
  • 39.
     Gestion d’association(HttpSession) Enumeration getAttributNames() : retourne les noms de tous les attributs Object getAttribut(String name): retourne l’objet associé au nom setAttribut(String na, Object va): modifie napar la valeur va removeAttribut(String na): supprime l’attribut associé à na  Destruction (HttpSession) invalidate() : expire la session logout() : termine la session
  • 40.
    Exemple : suivide session pour un compteur
  • 41.
    Collaboration de Servlets Les Servlets s’exécutant dans le même serveur peuvent dialoguer entre elles  Deux principaux styles de collaboration:  partage d’information : un état ou une ressource. Exemple : un magasin en ligne pourrait partager les informations sur le stock des produits ou une connexion à une base de données  Partage du contrôle: une requête. Réception d’une requête par une Servlet et laisser l’autre Servlet une partie ou toute la responsabilité du traitement
  • 42.
     La collaborationest obtenue par l’interface ServletContext  Une Servlet retrouve le ServletContext de son application web par un appel à getServletContext()  Exemples de méthodes:  void setAttribute(String name, Object o) : lie un objet sous le nom indiqué  Object getAttribute(String name) : retrouve l’objet sous le nom indiqué  Enumeration getAttributeNames() : retourne l’ensemble des noms de tous les attributs liés  void removeAttribute(String name) : supprime l’objet lié sous le nom indiqué
  • 43.
    Collaboration de Servlets: partage du contrôle  Deux types de distribution  Distribuer un renvoi : une Servlet peut renvoyer une requête entière  Distribuer une inclusion : une Servlet peut inclure du contenu généré  Les avantages sont  La délégation de compétences  Architecture logicielle MVC (Servlet = contrôle et JSP = présentation)
  • 44.
     Le supportde la délégation de requête est obtenu par l’interface RequestDispatcher  Une Servlet obtient une instance sur la requête  RequestDispatcher getRequestDispatcher(String path): retourne une instance de type RequestDispatcher par rapport à un composant  Un composant peut-être de tout type : Servlet, JSP, fichier statique, …  path est un chemin relatif ou absolu ne pouvant pas sortir du contexte  Pour distribuer en dehors du contexte courant il faut :  Identifier le contexte extérieur (utilisation de getContext())  Utiliser la méthode getRequestDispatcher(String path)
  • 45.
    Partage du contrôle: distribuer un renvoi  La méthode forward(...)de l’interface RequestDispatcher renvoie une requête d’une Servlet à une autre ressource sur le serveur  void forward(ServletRequest req, ServletResponse res): redirection de requête
  • 46.
    Exemple : distribuerun renvoi de Emetteur à Recepteur
  • 47.
    Partage du contrôle: distribuer une inclusion  La méthode include(…)de l’interface RequestDispatcher inclut le contenu d’une ressource dans la réponse courante  La différence avec une distribution par renvoi est :  la Servlet appelante garde le contrôle de la réponse  elle peut inclure du contenu avant et après le contenu inclus  Possibilité de transmettre des informations lors de l’inclusion:  en attachant une chaîne d’interrogation (au travers de l’URL)  en utilisant les attributs de requête via la méthode setAttribute(...)
  • 48.
    Exemple : permetde distribuer une inclusion
  • 50.
    A vous dejouer TP