servlet m2 – miage/sid [email protected]
TRANSCRIPT
![Page 2: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/2.jpg)
Miage SID 2
Objectif
• Faciliter la programmation des pages dynamiques en JAVA
• Répartition des tâches :– Serveur Web– Conteneur– Application
![Page 3: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/3.jpg)
Miage SID 3
Principe
Navigateur
Serveur Web
Adressage
![Page 4: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/4.jpg)
Miage SID 4
Principe
Navigateur
HTTP/GET
Serveur Web
URL
![Page 5: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/5.jpg)
Miage SID 5
Principe
Navigateur
Serveur Web
TomCat
URL
Request
![Page 6: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/6.jpg)
Miage SID 6
Principe
Navigateur
Serveur Web
TomCat
Request
ObjetServletObjet
ServletObjetServlet
![Page 7: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/7.jpg)
Miage SID 7
Principe
Navigateur
Serveur Web
TomCat
Response
ObjetServlet
![Page 8: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/8.jpg)
Miage SID 8
Principe
Navigateur
Serveur Web
TomCat
Response
ObjetServlet
HTML/TXT
![Page 9: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/9.jpg)
Miage SID 9
Principe
Navigateur
Serveur Web
TomCat
ObjetServlet
HTML/TXT
![Page 10: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/10.jpg)
Miage SID 10
Classes Java
Source: Leila Kefi-Khelif
![Page 11: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/11.jpg)
Miage SID 11
Cycle de vie
N’existe pas Instanciation
Initialisation
Disponible
Appel service
Indisponible
Destruction
![Page 12: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/12.jpg)
Miage SID 12
Cycle de vie
N’existe pas Instanciation
Initialisation
Disponible
Appel service
Indisponible
Destruction
Démarragedu conteneur
![Page 13: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/13.jpg)
Miage SID 13
Cycle de vie
N’existe pas Instanciation
Initialisation
Disponible
Service
Indisponible
Destruction
Appel de init()
N’existe pas Instanciation
Initialisation
Disponible
Service
Indisponible
Destruction
Appel de init()
N’existe pas Instanciation
Initialisation
Disponible
Service
Indisponible
Destruction
Appel de init()
![Page 14: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/14.jpg)
Miage SID 14
Cycle de vie
N’existe pas Instanciation
Initialisation
Disponible
Service
Indisponible
Destruction
Appel de service()
![Page 15: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/15.jpg)
Miage SID 15
Cycle de vie
N’existe pas Instanciation
Initialisation
Disponible
Service
Indisponible
DestructionTimeout ou arrêt
du conteneur
![Page 16: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/16.jpg)
Miage SID 16
Cycle de vie
N’existe pas Instanciation
Initialisation
Disponible
Service
Indisponible
Destruction
Libération
![Page 17: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/17.jpg)
Miage SID 17
Exemple de Servlet
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML>\n" + "<HEAD><TITLE>Hello</TITLE></HEAD>\n" + "<BODY>\n" + "<H1>Hello Nancy !<H1>\n" + "</BODY></HTML>"); }}
![Page 18: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/18.jpg)
Miage SID 18
HttpServlet
• doGet() : méthode associée à la requête HTTP GET • doPost() : méthode associée à la requête HTTP POST • init() and destroy() : gestion des ressources liées au cycle de
vie du Servlet• getServletInfo() : méthode associée à la description d’un
Servlet• HttpServletRequest : classe servant à récupérer les
paramètres d’une requête HTTP • HttpServletResponse : classe servant à envoyer la réponse à
d’une requête HTTP
![Page 19: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/19.jpg)
Miage SID 19
Arborescence
• <Contexte>/– *.html, *.jsp…
– WEB-INF/• web.xml : descripteur de l’application
• classes/ : les classes utilisées par l’application (y compris les servlets)
• lib/ : les .jar utilisés par l’application
– META-INF/• context.xml : descripteur des ressources de l’application
(uniquement .war)
![Page 20: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/20.jpg)
Miage SID 20
Projet Web/Eclipse
• Créer une application avec un seul Servlet qui affiche « Bonjour Nancy !» avec un URL de type:– http://<serveur>/hello/servlet
![Page 21: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/21.jpg)
Miage SID 21
Eclipse
• File>New>Dynamic Web Project– Créer un projet (hello)
• File>New>Other>Web>Servlet– Créer le servlet HelloServlet (mettre du code)
• Ajouter le projet au serveur local et démarrer le serveur local
• Tester avec un navigateur (http://localhost/hello/HelloServlet)
![Page 22: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/22.jpg)
Miage SID 22
Web.xml
• Rajouter :<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>
• Tester à nouveau
![Page 23: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/23.jpg)
Miage SID 23
Page d’accueil
• Ajouter une page d’accueil au projet (index.html)
![Page 24: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/24.jpg)
Miage SID 24
Il y a une vie après le développement
• Documentation
• Distribution
• Déploiement
• Tests
![Page 25: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/25.jpg)
Miage SID 25
Web.xml<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name> The name of the application </display-name> <description> C'mon, you know what goes into a description, don't you? </description> <servlet> <servlet-name>guess_what_name_of_servlet</servlet-name> <description>Again, some description</description> <servlet-class>com.foo-bar.somepackage.TheServlet</servlet-class> <init-param> <param-name>foo</param-name> <param-value>bar</param-value> </init-param>
</servlet>
![Page 26: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/26.jpg)
Miage SID 26
Web.xml
<servlet-mapping> <servlet-name>name_of_a_servlet</servlet-name> <url-pattern>*.some_pattern</url-pattern> </servlet-mapping>
<servlet-mapping> <servlet-name>image</servlet-name> <url-pattern>/image</url-pattern> </servlet-mapping>
<session-config> <session-timeout>30</session-timeout> </session-config>
</web-app>
![Page 27: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/27.jpg)
Miage SID 27
Modèle
• Nous proposons un « modèle » de projet qui s’appuie sur Ant (à installer préalablement)
• Objectif :– Rester compatible avec un projet Eclipse– Intégrer une documentation– Engendrer une distribution (source ou binaire)– Faciliter le déploiement
![Page 28: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/28.jpg)
Miage SID 28
Exercice
• Ecrire une application composée d’un servlet qui affiche « Hello Nancy ! » en utilisant le web-modele fournit
![Page 29: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/29.jpg)
Miage SID 29
Etapes
• Créer un dossier hello2 dans votre workspace
• Y recopier le contenu du dossier web-modele
• Créer un projet hello2 de type Dynamic Web sous Eclipse
• Recopier les sources du projet hello• Tester
![Page 30: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/30.jpg)
Miage SID 30
Etapes
• Mettre à jour les fichiers– README.txt– CHANGELOG.txt– doc/*.html
• Engendrer une distribution source– Dans une fenêtre de commande:
• ant dist
• Déployer– Mettre à jour le fichier proj.properties– ant deploy
![Page 31: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/31.jpg)
Miage SID 31
Application « bonjour »
![Page 32: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/32.jpg)
Miage SID 32
Application « bonjour »
![Page 33: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/33.jpg)
Miage SID 33
Gestion des sessions
• HTTP : protocole sans état– Impossibilité de garder des informations d’une
requête à l’autre (identifier un client d’un autre)
• Utilisation de différentes solutions pour remédier au problème d’état dont:– Cookies– HttpSession
![Page 34: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr](https://reader036.vdocuments.net/reader036/viewer/2022062511/551d9da2497959293b8d23cb/html5/thumbnails/34.jpg)
Miage SID 34
HttpSession
//get the session objectHttpSession session = request.getSession();//get the resourceInteger count = (Integer)session.getAttribute("count");//if it is the first call, create itif (count == null) { count = new Integer(0);}else{//update the resource count = new Integer(count.intValue()+1);}// store the new resourcesession.setAttribute("count", count);