La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

J2EE Dr. Mohammed ERRITALI. Architecture 1-tiers Présentation Traitement données Navigateur Serveur Web Systèm e de fichiers.

Présentations similaires


Présentation au sujet: "J2EE Dr. Mohammed ERRITALI. Architecture 1-tiers Présentation Traitement données Navigateur Serveur Web Systèm e de fichiers."— Transcription de la présentation:

1 J2EE Dr. Mohammed ERRITALI

2 Architecture 1-tiers Présentation Traitement données Navigateur Serveur Web Systèm e de fichiers

3 Architecture 2-tiers Présentation Traitement données Navigateur Serveur Web Base de données

4 Architecture 3-tiers Présentation Traitement données Navigate ur Serveur Web Base de données Serveur d’application s

5 Le modèle d’application de J2EE

6 La communications entre le 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 Types de containers

9  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 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

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 Servlets

13 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

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

15 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 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 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 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 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 *** …. 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 *** …. 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 Moteur de Servlets Réponse HTTP 1 Réponse HTTP 2 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 destroy() Terminer le pool de threads Initialisation Exécution service Exécution service

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

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éthodeDescription 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

26 HttpServletResponse MéthodeDescription 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

27 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(" "); out.println(" Titre "); out.println(" "); out.println("Ma première servlet"); out.println(" "); 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 FirstServlet FirstServlet /fs 30

30

31 A vous de jouer 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 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

35  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

36  Code pour créer un cookie et l’ajouter au client  Code pour récupérer les cookies

37 Exemple : gestion de 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 : suivi de 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 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é

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

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 : distribuer un 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 : permet de distribuer une inclusion

49

50 A vous de jouer TP


Télécharger ppt "J2EE Dr. Mohammed ERRITALI. Architecture 1-tiers Présentation Traitement données Navigateur Serveur Web Systèm e de fichiers."

Présentations similaires


Annonces Google