J2EE : Concept des Servlets Comprendre le concept des Servlets
Transcription
J2EE : Concept des Servlets Comprendre le concept des Servlets
ISI 1022 : Programmation Internet et Java J2EE : Concept des Servlets Programmation Internet et Java Jean-Noël Sorenti. Année 2002/2003 Comprendre le concept des Servlets de J2EE ISI 1022 : Programmation Internet et Java 1 Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java J2EE : API Servlet, JSP et EJB l l l Programmation Internet et Java L ’API J2EE comprends les packages suivants : • javax.servlet, javax.servlet.http (gestion des servlets) • javax.ejb (gestion des ejbs) • javax.servlet.jsp (gestion des jsp) J2SE Comprend les packages standards : • java.lang, java.util, rmi, corba Référence sur le Web : • http://java.sun.com/j2ee/ • http://jakarta.apache.org/tomcat/ pour l’implémentation Tomcat 2 Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java Programmation Internet et Java J2EE : Les Servlets et leur fonctionnement l Qu’est ce qu’une Servlet ? • Classe java dont le rôle est de générer une réponse à une requête. • La Servlet est une classe java contenant une méthode service() qui sera appelée par le serveur d’application en cas de requête. • Peux aussi contenir une méthode init() et destroy() qui seront appelées respectivement au démarrage du serveur (ou premier appel de la Servlet) et à son arrêt. 3 Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java Programmation Internet et Java J2EE : Les Servlets et leur fonctionnement l Notre Servlet a un rôle à respecter : • Doit contenir une méthode service(), init(), …; pour cela, elle implémentera l’interface javax.servlet.Servlet définie par J2EE : • Interface javax.servlet.Servlet : • Contiens les méthodes init(), destroy(), service(), getServletConfig(), getServletInfo() à implémenter. Toute classe implémentant cette interface sera donc dans l’obligation d’implémenter ces fonctions. 4 Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java Programmation Internet et Java J2EE : Les Servlets et leur fonctionnement l Implémentation indirecte de l’interface Servlet : • Nos Servlets n’implémentent pas directement l’interface Servet mais vont hériter de GenericServlet ou HttpServlet (qui implémentent Servlet) ; Ceci permettra d’hériter de fonctions de bases et propriétés déjà implémentées : • GenericServlet implémente javax.servlet.Servlet • getServletName(), getServletContext(), … • HttpServet hérite de GenericServlet • service(), getLastModified(),… 5 Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java Programmation Internet et Java J2EE : Les Servlets et leur fonctionnement l GenericServlet : • Contiens la méthode service() abstraite à être implémentée. • à On implémente la méthode service() l HttpServlet : • La méthode service() est implémentée, elle dispatche selon le type MIME de l’entête de la requête l’exécution des méthodes doXXX : doGet, doPost, doTrace • à On implémente les méthodes doXXX ou on ré implémente la méthode service(). 6 Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java Programmation Internet et Java J2EE : Les Servlets et leur fonctionnement l Les Servlets sont gérées par un serveur d’application qui n’est autre qu’une JVM : • Le client envoie une requête HTTP • Le serveur récupère la requête comprenant l’information sur la Servlet à lancer • Construction d’un objet ‘request’ implémentant ServletRequest qui représente la requête du Client. • Construction d’un objet ‘response’ implémentant ServletResponse qui représente la réponse. • Si la Servlet n’est pas instanciée, on a instanciation puis appel de la méthode init() • Appel de la méthode service() en passant ‘request’ et ‘response’ en paramètres. Service() effectue les traitement et fournit le résultat au client. 7 Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java Programmation Internet et Java J2EE : Les Servlets et leur fonctionnement l Fonctionnement du Serveur d’application et Servlets Requête request response ? OUI? Appel de service() en passant request et response Réponse Servlet Servlets Client Recherche de la bonne servlet. Cette dernière est t-elle déjà instanciée ? NON ? Instanciation, appel init() puis de service() service() init() Instanciation d ’ Objets de classe implémentant les interfaces HttpServletRequest et HttpServletResponse. On pourra donc les récupérer en utilisant ces interfaces ! MaServlet service() init() Déjà instanciées Serveur HTTP/Application 8 Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java Programmation Internet et Java J2EE : Les Servlets et leur fonctionnement l Attention : bien retenir que l’on a seulement une seule instance de Servlet pour toutes les requêtes ! MaServlet Client 1 Client 1 Client 2 service() init() Un seul Objet instancié pour toutes les requêtes utilisateurs. MaServlet service() init() 9 Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java Programmation Internet et Java J2EE : Les Servlets et leur fonctionnement l Une seule instance va impliquer un partage de ressources entre plusieurs processus en cas d’appel simultanés de la méthode service(). • Il faut gérer les problème de Concurrence • Utiliser intelligemment les « synchronized » car peut • atténuer considérablement les performances. Utiliser l’interface SingleThreadModel : Nous verrons plus tard dans le cours qu’il y a une parade plus complexe si on est coincé. On pourra implémenter une interface SingleThreadModel. 10 Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java Programmation Internet et Java J2EE : Les Servlets et leur fonctionnement l Récapitulatif sur les Servlets : • • • • a) classe java héritant de javax.servlet.GenericServlet ou javax.servlet.http.HttpServlet ou l’on peut définir (ou redéfinir) les méthodes init(),service(),destroy(),doGet,doPost,… b) instanciation dynamique unique puis appel de la méthode init(). (au démarrage du Serveur ou à son premier appel.) c) toutes les requêtes appellent la même méthode service(). La méthode service peut donc être appelée simultanément par plusieurs processus. d) à l’arrêt du Serveur, on a un appel de la méthode destroy(). 11 Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java Programmation Internet et Java J2EE : Les Servlets et leur fonctionnement l L’émission de requêtes vers le serveur peut se faire sous forme d’URL : protocole://host.domain[:port]/path[?param1=valeur1¶m2=…] protocole host.domain port : /path param1,… dialogue instauré entre le client et serveur pour communiquer ; http, https, ftp… représente le nom du serveur DNS ou une adresse IP. localhost = IP machine courante dans le modèle sockets, le serveur est à l’écoute sur un port. Le port par défaut est 80 (pour protocole HTTP de base). chemin de la ressource à exploiter. les paramètres peuvent êtres passés dans l’URL 12 Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java Programmation Internet et Java J2EE : Les Servlets et leur fonctionnement l Emission requêtes à l’aide d’un formulaire : dans un fichier HTML : <form action=‘’/path’’ method=‘’post’’> <input type=‘’hidden’’ name=‘’param1’’ value=‘’val1’’ /> <input type=‘’text’’ name=‘’param2’’ value=‘’val2’’ /> <input type=‘’submit’’ value=‘’ok’’> </form> Pas besoin de repréciser dans l’action du formulaire le serveur et le protocole (http://host.domain) si cette page HTML proviens du même serveur et que l’on veut communiquer avec le même protocole. 13 method =‘’post’’ : déclanchera la méthode doGet ou doPost de HttpServlet. hidden : permet de passer des champs en champ caché (Une solution pour passer l’ID de session) submit : permet de créer un bouton de validation Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java Programmation Internet et Java J2EE : Les Servlets et leur fonctionnement l La requête est généralement émise au Serveur à l’aide du protocole HTTP. • Protocole sans état • (connexion,émission,déconnexion) La syntaxe du protocole HTTP est interprétable par l’homme, comme nous pouvons le voir dans l’exemple qui suit : GET /simple.html HTTP/1.1 Requête HTTP/1.1_200 OK Content-Type:text/html Content-Length:194 Date: Tue.06 Mar 2001 18:54:41 GMT Server : Apache Tomcat/40-B1 Etag : ‘194-72637362000’ Réponse <HTML>…. Contenu Réponse 14 Le protocole HTTP est sans état, ce qui signifie qu’entre 2 requêtes d’un même utilisateur, HTTP ne nous donne pas de moyen intrinsèque pour effectuer de lien. On a toujours une connexion au serveur, l’envoie de la requête puis une déconnexion. C’est pour cela que l’on utilisera le système des cookies ou l’ID dans l’URL pour pouvoir instaurer un mécanisme de Session ; ce dernier étant géré automatiquement par J2EE. Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java J2EE : Les Eléments de l’API Servelts l Programmation Internet et Java ServletConfig : • ServletConfig comporte des données propres à une Servlet. • peut contenir des informations configurables dans un fichier de déploiement du serveur. (web.xml). • est passé en paramètre à la méthode init() de la Servlet. • Une instance de ServletConfig par Servlet 15 Lors de la définition d’une Servlet dans une application Web, on définit la Servlet dans un fichier (XML). On peux aussi définir des points d’entrées pour notre Servlets. Ces derniers seront stockés dans le ServletConfig : <web-app> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>jweb.examples.HelloServlet</servlet-class> <init-param> <param-name>greeting</param-name> <param-value>Hello</param-value> </init-param> </servlet> </web-app> On pourra en java écrire ceci : public void init(ServletConfig cfg) { } String greeting = cfg. getInitParameter(‘greeting’); Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java J2EE : Les Eléments de l’API Servelts l Programmation Internet et Java ServletContext: • ServletContext comporte des données propres à une application Web. • peut contenir des informations configurables dans un fichier de déploiement du serveur. (web.xml). • Une instance de ServletContext par application Web par machine Virtuelle Java ou Serveur. 16 Comme pour la Servlet, On peut définir des paramètres d’initialisations pour le contexte (l’application Web). <web-app> <context-param> <param-name>greeting</param-name> <param-value>Hello</param-value> </context-param> … </web-app> Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java J2EE : Les Eléments de l’API Servelts l Programmation Internet et Java ServletRequest ou HttpServletRequest : • ServletRequest comporte des données propres à une requête utilisateur. • L’instance ServletRequest est fourni par le serveur. • Une instance ServletRequest par requêtes. Quand le cycle Requête - Réponse est terminé, l’instance meurt. 17 Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java J2EE : Les Eléments de l’API Servelts l Programmation Internet et Java ServletResponse ou HttpServletResponse : • ServletRequest comporte des information et des méthodes pour générer la réponse vers le client. • L’instance ServletResponse est fourni par le serveur. • Une instance ServletResponse par requêtes. Quand le cycle Requête-Réponse est terminé, l’instance meurt. 18 Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java J2EE : Les Eléments de l’API Servelts l Programmation Internet et Java HttpSession : • HttpSession comporte des information et des méthodes sur un utilisateur donné. Ces informations restent persistante entre plusieurs requêtes. • L’instance HttpSession est fourni par le Serveur. • Une instance HttpSession par utilisateur. Quand la session est considérée obsolète (fermée,perdue), l’instance n’est plus disponible. 19 Nous allons étudier dans les prochains cours en détail le mécanisme des Sessions sous J2EE. Il faut savoir que notre Serveur d’application possède la fonctionnalité de nous fournir une Session par utilisateur. Ce qui sera intéressant est que cette Session joue le rôle de conteneur, ce qui signifie que l’on pourra y stoker des objets de n’importe quel type, ce qui signifie encore que l’on pourra rendre persistantes des informations entre plusieurs requêtes d’un même utilisateur. Jean-Noël Sorenti – Année 2002/2003 ISI 1022 : Programmation Internet et Java Programmation Internet et Java J2EE : Eléments de bases de l’API Servlets javax.servlet.Servlet javax.servlet.http.HttpServletRequest getMethod() init() getParameters() service() getSession() destroy() javax.servlet.http.HttpServletResponse javax.servlet.GenericServlet init() getWriter() : java.io.PrintWriter service() invoqué par une requête destroy() setContentType(String) sendError() javax.servlet.http.HttpServlet javax.servlet.http.HttpSession getMethod() getParameters() doGet() invoqué par requête GET doPost invoqué par requête POST … getSession() javax.servlet.ServletContext getServerInfo() getAttribute() setAttributes() MaServlet Réimplémentation service() Implémentation doGet() implémentation doPost() 20 Jean-Noël Sorenti – Année 2002/2003