- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 1/81
L es s er v le ts
(1ere partie)
Bibliographies: Les notes de cours sur les servlets est une revue littéraire des documents mentionnésci-dessus. Plusieurs extraits ont été tirés ou traduits de ces références. Cette revue tient compte desdernières mises à jour apportées au logiciel Tomcat et à la spécification (2.3) des servlets. Site web officiel de SUN sur les servlets: http://java.sun.com/products/servlet/
Des documents sur les servlets: http://www-sop.inria.fr/acacia/personnel/itey/Francais/Cours/PDF/servlets.pdfhttp://home.nordnet.fr/~fadelannoy/servlets.htmlhttp://java.sun.com/docs/books/tutorial/servlets/index.htmlhttp://java.sun.com/products/servlet/articles/tutorial/
Des documents sur Tomcat: http://jakarta.apache.org/tomcat/tomcat-4.0-doc/index.htmlhttp://darktigrou.free.fr/Servlets-book2_der/node1.html
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 2/81
Dans cetteprésentation, nous allons répondreauxquestions suivantes :
-C'est quoi une application web?-Qu'est ce qu'une servlet Java?-A quoi servent les servlets?-Quels sont les avantages et les inconvénients des servlets?-C'est quoi les différences entre les scripts CGI et les servlets?-A quoi ressemble le code d'une servlet?-Comment est constitué le paquetage Servlet?-Comment se déroulent les interactions avec des clients?-C'est quoi le cycle de vie d'une servlet?-Comment configurer Tomcat4.0.1?-Comment déployer une application dans Tomcat4.0.1?
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 3/81
C 'e st q u o i u n a p p lic a tio n w eb ?
Une application web est constituée de 2 niveaux, le client émettant une requête et le serveur traitant cette requête.
Navigateur WebServeur Web soumissiond’une requête (2) …
…….. Scripts/Prg. serveur
Base de données Une forme à compléter (1)
HTTPCGI traitement de la requête (3)
retourne un résultat (4)
Client Serveur
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 4/81
(1)Unserveur websoumetune forme d’undocument à compléter (une requête),
(2)Le client complète la forme et la retourne au serveur,
(3)Le serveur laréceptionne etlaredirige vers laservelt invoquée dans la page html. En exécutant cette requête, leprogramme peut communiquer avec une ou plusieurs bases
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 5/81
de données sic’est nécessaire.Ainsidonc,une servlet analyseles données soumises, peut éventuellement sauvegardercelles-cioucollecterd'autrespour construiredynamiquement une page HTML.
(4)ces programmes retournent les résultats au serveur qu’il secharge de les transmettre au client.
Le client peut utiliser :
-un formulaire HTML, permettant de saisir les champs ou bienil peut y avoir validation via des scripts (javaScript) ;
-des applets et communiquer avec le serveur via dessockets/RMI.
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 6/81
Les requêtes http vers le serveur contiennent :
-l’url de la ressource à accéder,
-la requête GET pour extraire des informations sur le serveur,
-la requête POST pour modifier les données sur le serveur.
Le serveur identifie avec la requête le type d’environnement d’exploitation à charger en fonction de :
-l’extension du fichier (.cgi, .jsp etc.) ou
-le répertoire où il se trouve (cgi-bin/, servlet/ etc.).
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 7/81
Le serveur charge par la suite l’environnement d’exécution Perl (cgi-perl), JVM (servlets) etc.
Le script ouprogrammepréciseletype ducontenu(HTML, images etc.) et intègre la réponse dans un flot de sortie.
Le navigateur définit letype MIME(l’encodage utilisé pour letransfert de documents multimédias à travers le réseau) texte/html audio/basic image/gif etc. et affiche les données en fonction.
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 8/81
Q u 'e st q u 'u n e se rv le t J a v a ?
Servlet : Server-side applet
Les servlets sont aux serveurs ce que sont les applets aux browsersmais sans interface graphique utilisateur …
Elles sont limitées à la puissance du langage HTML … par contre,elles ne sont pas astreintes aux mêmes règles de sécurité que les applets
Les servlets correspondent à des programmes Java normaux qui utilisent des modules supplémentaires (ainsi que les classes et lesméthodes associées) figurant dans l'API des servlets Java.
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 9/81
Lesservletss'exécutent sur une machine de serveur Webàl'intérieur d'unserveur compatibleavecJava.Elles permettent l'extension des fonctions du serveur.
Une servlet peut être chargé :
-automatiquement lors du démarrage du serveur Web,
-lorsque le premier client demande les services de la servlet. Une fois chargées, les servlets restent actives dans l'attente d'autresrequêtes du client.
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 10/81
Les servlets permettent l'extension des fonctions du serveur grâce àlacréationd'unenvironnement de prestationde servicesde requête/réponse via le Web :
Un client envoie une requête au serveur. Ce dernier transmet auservlet les informations relatives à la requête. La servlet crééeensuite une réponse que le serveur renvoie au client.
Dans la mesure où il s'agit d'un programme Java :
-La servlet peut utiliser toutes les fonctions du langage Java lorsde la création de la réponse.
-Elle peut également communiquer avec des ressources externestels que des fichiers ou des bases de données, ou avec d'autres
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 11/81
applications (également écrites en langage Java ou dans d'autreslangages), afinde créer laréponseetéventuellement desauvegarderdesinformations relativesà l'interactionrequête/réponse.
La réponseenvoyéeauclient peut donc êtreune réponsedynamique et unique conçue pour une interaction particulière et non une page HTML statique existante.
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 12/81
A q u o i s er v en t l es s er v le ts ?
Les servlets exécutent un grand nombre de fonctions, par exemple:
- Une servlet peut créer etrenvoyerune page WebHTMLcomplètedont lecontenudynamique dépendde lanaturede larequête du client.
- Une servlet peut simplement créer une partie d'une page WebHTML qui est intégrée à une page HTML statique existante. - Une servlet peut communiqueravecd'autresressourcesduserveur, y compris des bases de données, d'autres applications Java et des applications écrites dans d'autres langages.
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 13/81
- Une servlet peut traiter les connexions avec plusieurs clients enacceptant les données en entrée de plusieurs clients et en diffusant à ces derniersdesrésultats. Une servlet peut, parexemple, correspondre à un serveur de jeux électroniques faisant intervenirplusieurs joueurs.
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 14/81
Q u el s s o n t l es a v a n ta g es e t l es in co n v én ie n ts d es s er v le ts ?
Avantages
Lesservletssont indépendantes desOS(UnixouNT) etdesserveurs Web (Apache, IIS etc.) ;
Peuvent produire de l'HTMLcôtéclient (notamment pour laconsultation de la base), sur la base d'http;
Peuvent dialogueravecdesappletsJava côtéclient avecunprotocole à objets distribués de type RMI;
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 15/81
S'appuient sur un langage vraiment standard : Java (et non pas Java script ou Visual Basic);
Par rapport aux applets, le client est « allégé » ;
Parrapport auxCGI, les servletsprennent encharge les connexions des utilisateurs en multi-thread, qui n’est pas le cas desCGI (même avec FastCGI).
Inconvénients
Par rapport aux applets, interface graphique utilisateur limitée àHTML
Par rapport au CGI, voir plus loin dans le document.
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 16/81
C 'e st q u o i l es d if fé re n ce s e n tr e le s s cr ip ts C G I e t l es s er v le ts ?
La plus grosse différenceentre les CGI etles servletsest laperformance.
-Il n'ya qu'une seulemachine virtuelleJava qui tourne sur leserveur.
-La servlet est placée en mémoire une fois qu'elle est appelée. Ellen'est pas remise en mémoire jusqu'à ce que la servlet change.
-Une servlet dont le code a été modifié peut être réactivée (c'est àdire replacée enmémoire)sans redémarrer leserveur oul'application.
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 17/81
Common Gateway Interface (CGI)
FastCGI Processus Principal Req. CGI1
Req. CGI2
Req. CGI1 Processus Fils pour CGI1
Processus Fils pour CGI2
Processus Fils pour CGI1
Processus Principal Req. CGI1
Req. CGI2
Req. CGI1 Un seul processus Fils pour CGI1
Un seul processus Fils pour CGI2
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 18/81
Les servlets
Les servlets résident en mémoire, de ce fait leur exécution est trèsrapide.L'informationstatique peut êtrepartagéeparplusieursinvocations de la servlet, vous autorisant donc de partager cetteinformation entre plusieurs utilisateurs. Processus Principal Req. servelt1
Req. servlet2
Req. servlet1 JVM servlet1
servlet2 Thread
Thread
Thread
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 19/81
Les servlets sont modulaires, chaque servlet peut accomplir unetache spécifique et ainsi vous pouvez les rendre communicantes.
Moins il y a de calcul à faire côté client, plus l’approche servlet estintéressante.
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 20/81
A q u o i r es se m b le le c o d e d 'u n e se rv le t?
importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;
publicclassHelloWorldextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{
response.setContentType("text/html");
PrintWriterout=response.getWriter();
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 21/81
out.println("<html>");out.println("<body>");out.println("<head>");out.println("<title>HelloWorld!</title>");out.println("</head>");out.println("<body>");out.println("<h1>HelloWorld!</h1>");out.println("</body>");out.println("</html>");}}
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 22/81
C o m m en t e st c o n st it u é le p a q u et a g e S er v le t?
Le paquetage javax.servlet fournit les interfaces et classes pour réaliser des servlets.
À un moment donné, il était question d’intégrer ce paquetage dans laversion1.2de JDK; puisil a été décidé autrement pour permettre desmodifications etcorrections dans lepaquetage demanière indépendante.
Parlasuite, lepaquetage a été intégrédans Java2Platform, Enterprise Edition (J2EE)
http://java.sun.com/j2ee/
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 23/81
La relation avec Tomcat
Tomcat est unlogiciel gratuit,open-source,qui implanteles technologies Java Servlet et JavaServer Pages développées dans lecadreduprojet Jakartaà lafondation"Apache SoftwareFoundation."
http://jakarta.apache.org
Sun a adapté et intégré le code de base de Tomcat dans J2EE. Sundétient et continue de mettre à jour les spécifications de JavaServerPagesTM et JavaTM Servlets dans un processus ouvert à toute la communauté Java.
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 24/81
L’architecture du paquetage est décrite comme suit :
java.lang.Object | +--javax.servlet.GenericServlet | +--javax.servlet.http.HttpServlet
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 25/81
L'interface Servelt
Toutes les servletsimplantent l'interface Servlet: javax.servlet.Servlet
soit directement ou bien via une classe qui implante cette interface, comme:
—javax.servlet.GenericServlet (paquetage javax.servlet)
—javax.servlet.http.HttpServlet (paquetage javax.servlet.http) particulièrement désignée pour des requêtes et réponses HTTP
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 26/81
Comme toute interface, l'interface Servlet déclare mais n'implantepas les méthodes qui gèrent les servlets et les communications avecdes clients. Cette charge revient aux concepteurs des servlets.
Cette interface possède les méthodes pour :
—initialiser la servlet : init()
—recevoir et répondre aux requêtes des clients : service()
—détruire la servlet et ses ressources : destroy()
—obtenir des informations sur la configuration de la servlet: getServletConfig()
—obtenir des informations comme l'auteur et la version de la servlet: getServletInfo()
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 27/81
C o m m en t s e d ér o u le n t l es in te ra ct io n s a v ec d es c lie n ts ?
Les servlets suivent un modèle de programmation requête-service-réponse :
Requête : objet javax.servlet.ServletRequest contient les informations nécessairespour unecommunication du client vers le serveur
Service : méthode service() invoquée
Réponse : objet javax.servlet.ServletResponsecontient les informations nécessairespour unecommunication du serveur vers le client.
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 28/81
importjavax.servlet.*;
publicclassfirstimplementsServlet{
publicvoidinit(ServletConfconfig)throwsServletException{…}
publicvoidservice(ServletRequestreq,ServletResponserep) throwsServletException,IOException{…}
publicvoiddestroy(){…}}
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 29/81
L'interface ServletRequest permet à la servelt d'accéder à:
-Les noms des paramètres passés par le client, le protocole utilisé,les noms desmachines ayant émisles requêtes, et le nom duserveur recevant ces requêtes.
-Le flux en entrée, ServletInputStream. Les servlets utilisent leflux en entrée pour prendre les données du client et utilise desprotocoles d'accès comme le protocole HTTP.
- IFT1176 - Aspects avancés en Java -
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01Servlets 30/81
L'interface ServletResponse permet à la servelt de répondre auxclients:
-permet à la servlet de fixer la taille de la réponse et son type.
-fournit unfluxensortie,ServletOutputStreamutilisé parlaservlet pour envoyer des données.