34
Servlet M2 – MIAGE/SID [email protected]

Servlet M2 – MIAGE/SID [email protected]

Embed Size (px)

Citation preview

Page 1: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr

Servlet

M2 – MIAGE/[email protected]

Page 2: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr

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

Miage SID 3

Principe

Navigateur

Serveur Web

Adressage

Page 4: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr

Miage SID 4

Principe

Navigateur

HTTP/GET

Serveur Web

URL

Page 5: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr

Miage SID 5

Principe

Navigateur

Serveur Web

TomCat

URL

Request

Page 6: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr

Miage SID 6

Principe

Navigateur

Serveur Web

TomCat

Request

ObjetServletObjet

ServletObjetServlet

Page 7: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr

Miage SID 7

Principe

Navigateur

Serveur Web

TomCat

Response

ObjetServlet

Page 8: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr

Miage SID 8

Principe

Navigateur

Serveur Web

TomCat

Response

ObjetServlet

HTML/TXT

Page 9: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr

Miage SID 9

Principe

Navigateur

Serveur Web

TomCat

ObjetServlet

HTML/TXT

Page 10: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr

Miage SID 10

Classes Java

Source: Leila Kefi-Khelif

Page 11: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Miage SID 31

Application « bonjour »

Page 32: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr

Miage SID 32

Application « bonjour »

Page 33: Servlet M2 – MIAGE/SID Azim.Roussanaly@univ-nancy2.fr

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

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