Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parMarie-Anne St-Cyr Modifié depuis plus de 9 années
1
Java - Servlet et JSP Servlets JSP (Java Server Pages) Tomcat
Programmation coté serveur Entièrement JAVA
2
Les Servlets
3
Servlet - Sommaire Qu'est-ce que c'est ? Cycle de vie
Partager l'information Initialisation Écriture des services Invoquer d'autres ressources Accéder au contexte de l'application
4
Servlet - Sommaire Maintenir un état client Finaliser une servlet
5
Qu'est-ce qu'une servlet ?
Classe Java spécifique Étend les capacités d'un serveur à travers un modèle requête/réponse Une Servlet peut répondre à n'importe quel type de requête Il existe une classe Java spécifique orienté HTTP
6
Qu'est-ce qu'une servlet ?
Packages/APIs échanges génériques : javax.servlet échanges HTTP : javax.servlet.http Tous implémente l'interface Servlet Classe GenericServlet
7
Qu'est-ce qu'une servlet ?
Services reposant sur HTTP La classe HttpServlet doGet doPost
8
Cycle de vie Le cycle de vie d'une servlet est controlée par un conteneur Un conteneur est le programme qui héberge une ou plusieurs applications web
9
Cycle de vie Lorsqu'une requête est mappée à une servlet :
si une instance de la servlet n'existe pas la classe de la servlet est chargée le conteneur instancie la classe la méthode init est lancée (initialisation vue plus loin) la méthode service est invoquée avec les objets les objets de requête et réponse.
10
Cycle de vie Si le conteneur lance la méthode destroy :
quand il doit être arreté quand l'application n'est plus déployée ... Une application peut déclarer des « listener » pour gérer ses différents cycles de vie
11
Partager l'information
Les composants web échangent avec d'autres objets pour accomplir certaines tâches : JavaBean bases de données autres ressources web ...
12
Partager l'information
Un des principaux moyens pour une application web d'echanger avec d'autres objets : Scope Objects Ce sont des objets de « visibilité » qui permettent d'accéder à des ressources Cette notion induit un niveau variable d'échange possible => notion de contexte
13
Partager l'information
Il existe plusieurs contextes (du plus large au plus fin ): web : composants web de la servlet session : composants gérant une requête qui appartiennent à une session request : composants de la requête Les propriétés de ces objets sont accessibles via des méthodes get|set
14
Partager l'information
Attention aux accès concurrents ! des composants peuvent être partagés par le jeu des contextes : le contexte le plus large est visible par toutes les applications pour un même contexte, un objet peut aussi être mis en concurrence d'accès attention au multithreading
15
Partager l'information
exemple de code « synchronisé » : public class Counter { private int counter; public Counter() { counter = 0; } public synchronized int getCounter() { return counter; } public synchronized int setCounter(int c) { counter = c; public synchronized int incCounter() { return(++counter);
16
Initialisation phase se déroulant juste après le chargement de la servlet par le conteneur méthode init () surchargeable exemple : initialisation de ressources configuration propre à l'application activité qui doit être lancé au démarrage
17
Initialisation exemple public class MyServlet extends HttpServlet {
private BookDBAO bookDB; public void init() { // code d'initialisation de la servlet }
18
Écriture des services le service d'une servlet est une implémentation de la méthode service de la classe GenericServlet service = doXXX : Get, Delete Options, Post Put, Trace
19
Écriture des services Ce sont des surcharges de méthodes de la classe HttpServlet la méthode service de la classe Servlet peut aussi être surchargée pour des besoins non HTTP
20
Écriture des services le modèle commun d'écriture de service :
extraction des informations d'une requête accès aux ressources externes nécessaires peuplement de la réponse en conséquence réponse au client
21
Écriture des services point de vue programmatif :
récupérer un flux de sortie pour la réponse si besoin modifier les en-têtes écrire un corps de réponse dans un buffer vider le buffer dans le flux de sortie
22
Écriture des services -Extraire les informations d'une requête
une requête contient des informations passées entre le client et l'application : validation de formulaire n'importe quelle requête web (AJAX...) toutes les requêtes implémentent l'interface ServletRequest
23
Écriture des services -Extraire les informations d'une requête
L'interface ServletRequest récupérer les paramètres informations sur le protocole utilisé informations de localisation (langue, encodage ...) objets Java passés par le conteneur ou par une autre servlet interface générique
24
Écriture des services -Extraire les informations d'une requête
Exemple String bookId = request.getParameter("Add"); request est un objet implicite crée par le conteneur getParameter est une des méthodes de javax.servlet.ServletRequest
25
Écriture des services -Extraire les informations d'une requête
spécialisation pour HTTP : HttpServletRequest requetes purement HTTP données d'URL historiquement tout ce qu'on peut trouver dans QUERY_STRING
26
Écriture des services -Extraire les informations d'une requête
URL string] le chemin est découpé en plusieurs informations : un contexte qui identifie l'application chemin vers la servlet le chemin vers la servlet peut être un mapping logique du conteneur
27
Écriture des services -Extraire les informations d'une requête
query_string contient toutes les informations transmises Client <a href="/bookstore1/catalog?Add=101"> Add To Cart</a> Serveur String bookId = request.getParameter("Add");
28
Écriture des services -Construction de la réponse
données transmises du serveur vers le client toutes les réponses implémentent l'interface javax.servlet.ServletResponse
29
Écriture des services -Construction de la réponse
récupération d'un flux de sortie pour écrire les données vers le client déclaration du type de contenu (MIME) gestion du buffer (par defaut non utilisé) gestion des locales
30
Écriture des services -Construction de la réponse
spécialisation pour HTTP javax.servlet.HttpServletResponse gestion des codes HTTP ( ) gestion des cookies petite quantité d'information stockée chez le client utilisé pour garder un identifiant de session (session tracking)
31
Écriture des services -Construction de la réponse
Exemple public class BookDetailsServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) { response.setContentType("text/html"); response.setBufferSize(8192); PrintWriter out = response.getWriter(); out.println("<html>" + "<head><title>+ messages.getString("TitleBookDescription") </title></head>"); ...
32
Invoquer d'autres ressources
processus qui fait parti de la construction d'une réponse il existe deux modèles d'invocation : par inclusion par délégation La classe RequestDispatcher est l'aiguillage des applications web
33
Invoquer d'autres ressources -L'inclusion
cas d'inclusion bannières informatives information de type copyright en fonction d'un contenu RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/banniere"); if (dispatcher != null) dispatcher.include(request, response);
34
Invoquer d'autres ressources -L'inclusion
un composant intégré par inclusion dans une page a accès à l'objet request : peut écrire dans le corps de la réponse n'a pas le droit de modifier les en-têtes HTTP
35
Invoquer d'autres ressources -Le transfert vers un autre composant
plus utilisé dans un modèle de traitement que de contribution directe à une réponse exemples pré-traiter une requête pour générer un objet intermédiaire effectuer un test applicatif comme une identification
36
Invoquer d'autres ressources -Le transfert vers un autre composant
exemple RequestDispatcher dispatcher = request getRequestDispatcher("/template.jsp"); if (dispatcher != null) dispatcher.forward(request,response);
37
Accéder au contexte de l'application
les composants web s'executent dans un contexte objet implémentant ServletContext paramètres d'initialisation ressources associées (objets, pool de connexion à une BD ...) contraintes d'identification
38
Accéder au contexte de l'application
le contexte de l'application (web context) est l'endroit ou l'information peut être partagée setAttribute (name) getAttribute (Name,Object) Attention, la visibilité/portée est globale !
39
Maintenir un état client
beaucoup d'applications web ont besoin de stocker des informations durant une série de requêtes série de requêtes = transaction une transaction a parfois besoin d'une certaine quantité de données persistantes
40
Maintenir un état client
les données gerées par une transaction sont maintenues dans une session une session maintient « en vie » les données de l'application pendant une transaction cette nécessité est inhérente à la nature même de HTTP (sans état)
41
Maintenir un état client -Accéder à une session
les sessions sont des instances de la classe HttpSession une servlet met sa session à disposition avec la méthode getSession il se peut qu'elle n'existe pas au premier appel, dans ce cas elle est instanciée
42
Maintenir un état client -Associer des objets à une session
n'importe quel objet peut être stocké dans la session mécanisme d'association nommé attention à ne pas confondre objet et applicatif et données (une sesssion n'est pas une BD)
43
Maintenir un état client -Associer des objets à une session
tous les composants appartenant au même contexte voient ce qui est stocké dans la session ET qui partagent une requête de la même session
44
Maintenir un état client -Associer des objets à une session
exemple HttpSession session = request.getSession(); ShoppingCart cart; cart=(ShoppingCart)session.getAttribute("cart");
45
Maintenir un état client -Notification d'événements de session
un objet peut être notifié de son appartenance à une session quand l'objet est ajouté/enlevé de la session javax.servlet.http.HttpSessionBindingListener quand la session est réveillée ou mise en sommeil (ce qui permet d'optimiser le conteneur à travers une BD ... ) javax.servlet.http.HttpSessionActivationListener
46
Maintenir un état client -Gestion de la session
un client ne peut pas notifier qu'il na plus besoin de session HTTP est un protocole sans état une session possède un timeout (configurable) [get|set]MaxInactiveInterval web.xml
47
Maintenir un état client -Gestion de la session
lorsque la session est terminée, elle peut être invalidée par la méthode invalidate HttpSession session=request.getSession(); // traitements session.invalidate();
48
Maintenir un état client -Tracking de session
un conteneur web peut utiliser plusieurs méthodes pour maintenir un état client dans tous les cas basées sur un identifiant peut être stocké dans un cookie à chaque URL retournée au client (écrite dans la réponse)
49
Maintenir un état client -Gestion de la session
attention un client peut ne pas supporter les cookies ! dans ce cas response.encodeURL ajoute automatiquement un attribut jsessionid
50
Finaliser une servlet lorsqu'un conteneur décide qu'une servlet doit être retirée (hors de ressources, shutdown ...) destroy ()
51
Les JSP
52
JSP - Sommaire Qu'est-ce que c'est ? Création de contenu statique
Création de contenu dynamique Unified Expression Language Objets implicites Composants JavaBean
53
JSP -Qu'est-ce que c'est ? abstraction de la classe HttpServlet
passage d'un mode programmatif vers un mode déclaratif XML !
54
JSP -Qu'est-ce que c'est ? point de vue conteneur :
JSP = Servlet au premier appel, un document JSP : est parsé comme un document XML transformé en langage Servlet compilé en .class chargé par le conteneur (cycle de vie identique)
55
JSP -Création de contenu statique
en JSP, pas besoin de récupérer le flux de sortie pour écrire dedans le contenu statique est tout ce qui n'est pas JSP et automatiquement restitué vers le client mélange possible de syntaxe XHTML et JSP !
56
JSP -Création de contenu statique
par défaut, le langage HTML est considéré dans le cas d'un autre langage intégré, il faut déclarer son type : page contentType="text/vnd.wap.wml"%>
57
JSP -Création de contenu dynamique
comme les servlets, le contenu dynamique est généré : soit à partir de l'utilisation du langage Java composants JavaBean objets implicites
58
JSP -Unified Expression Language
c'est un sous-langage de JSP qui permet d'accéder rapidement à des données association en notation pointée : d'un objet représentant une visibilité un composant à accéder une propriété à lire
59
JSP -Unified Expression Language
exemple : sessionScope.cart.numberOfItems sessionScope est un objet implicite représentant la session cart est un objet stocké dans la session numberOfItems est une propriété de cart
60
JSP -Unified Expression Language - Evaluation
intégration de la syntaxe EL dans un document JSP <element value="${sessionScope.cart.total}"/> ${sessionScope.cart.total} est converti, évalué et le résultat est transmis au « gestionnaire de tags »
61
JSP -Unified Expression Language - Evaluation
${variable} le conteneur recherche l'objet correspondant : page request session application
62
JSP -Unified Expression Language – référencer des propriétés
notation avec [] ou . ${customer.name} = ${customer[''name'']} deux méthodes différentes pour accéder à une même propriété name les combinaisons sont possibles ${customer.address["street"]}
63
JSP -Unified Expression Language – référencer des propriétés
accéder à une propriété : une classe Java correspondant à l'objet doit exister une méthode correspondante à la propriété doit exister sous la forme : [get|set]XXX
64
JSP -Objets implicites
beaucoup d'objets sont directement accessibles écriture allégée
65
JSP -Objets implicites
servletContext session request response
66
JSP -Objets implicites
param : association d'une valeur à un paramètre d'une requête paramValues : association nom/valeur de paramètres associés à la requête cookie : association d'un cookie à son nom
67
JSP -Objets implicites
Ces objets sont des découpages de la session selon des durées de vie différentes : pageScope : document requestScope : requête sessionScope : session applicationScope : application
68
JSP -Exemples ${1 > (4/2)} false ${4.0 >= 3} true
${(10*10) ne 100} false ${'a' < 'b'} true ${'hip' gt 'hit'} false ${4 > 3} true ${1.2E } ${3 div 4} ${10 mod 4} 2 ${!empty param.Add} True if the request parameter named Add is null or an empty string ${pageContext.request.contextPath}The context path
69
JSP -Exemples ${sessionScope.cart.numberOfItems}
The value of the numberOfItems property of the session-scoped attribute named cart ${param['mycom.productId']} The value of the request parameter named mycom.productId ${header["host"]} The host ${departments[deptName]} The value of the entry named deptName in the departments map
70
JSP -Composants JavaBean
classes Java réutilisables par différentes applications web (contextes) syntaxe particulière pour être reconnue par le conteneur les JB sont bien intégrés dans la syntaxe JSP
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.