340 likes | 530 Views
Servlet. M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr. Objectif. Faciliter la programmation des pages dynamiques en JAVA Répartition des tâches : Serveur Web Conteneur Application. Principe. Navigateur. Adressage. Serveur Web. Principe. Navigateur. HTTP/GET. URL. Serveur Web.
E N D
Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr
Objectif • Faciliter la programmation des pages dynamiques en JAVA • Répartition des tâches : • Serveur Web • Conteneur • Application Miage SID
Principe Navigateur Adressage Serveur Web Miage SID
Principe Navigateur HTTP/GET URL Serveur Web Miage SID
Principe URL Navigateur Request TomCat Serveur Web Miage SID
Principe Navigateur Request ObjetServlet ObjetServlet ObjetServlet TomCat Serveur Web Miage SID
Principe Navigateur ObjetServlet Response TomCat Serveur Web Miage SID
Principe Navigateur HTML/TXT ObjetServlet Response TomCat Serveur Web Miage SID
Principe Navigateur HTML/TXT ObjetServlet TomCat Serveur Web Miage SID
Classes Java Source: Leila Kefi-Khelif Miage SID
Cycle de vie N’existe pas Instanciation Initialisation Indisponible Disponible Destruction Appel service Miage SID
Cycle de vie Démarragedu conteneur N’existe pas Instanciation Initialisation Indisponible Disponible Destruction Appel service Miage SID
Cycle de vie N’existe pas Instanciation N’existe pas N’existe pas Instanciation Instanciation Appel de init() Appel de init() Appel de init() Initialisation Initialisation Initialisation Indisponible Disponible Indisponible Indisponible Disponible Disponible Destruction Service Destruction Destruction Service Service Miage SID
Cycle de vie N’existe pas Instanciation Initialisation Indisponible Disponible Appel de service() Destruction Service Miage SID
Cycle de vie N’existe pas Instanciation Initialisation Indisponible Disponible Destruction Service Timeout ou arrêtdu conteneur Miage SID
Cycle de vie N’existe pas Instanciation Initialisation Libération Indisponible Disponible Destruction Service Miage SID
Exemple de Servlet publicclass HelloServlet extends HttpServlet { publicvoid 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>"); } } Miage SID
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 Miage SID
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) Miage SID
Projet Web/Eclipse • Créer une application avec un seul Servlet qui affiche « Bonjour Nancy !» avec un URL de type: • http://<serveur>/hello/servlet Miage SID
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) Miage SID
Web.xml • Rajouter : <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/servlet</url-pattern> </servlet-mapping> • Tester à nouveau Miage SID
Page d’accueil • Ajouter une page d’accueil au projet (index.html) Miage SID
Il y a une vie après le développement • Documentation • Distribution • Déploiement • Tests Miage SID
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> Miage SID
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> Miage SID
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 Miage SID
Exercice • Ecrire une application composée d’un servlet qui affiche « Hello Nancy ! » en utilisant le web-modele fournit Miage SID
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 Miage SID
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 Miage SID
Application « bonjour » Miage SID
Application « bonjour » Miage SID
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 Miage SID
HttpSession //get the session object HttpSession session = request.getSession(); //get the resource Integer count = (Integer)session.getAttribute("count"); //if it is the first call, create it if (count == null) { count = new Integer(0); }else{//update the resource count = new Integer(count.intValue()+1); } // store the new resource session.setAttribute("count", count); Miage SID