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

Preview:

Citation preview

Servlet

M2 – MIAGE/SIDAzim.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

Miage SID 3

Principe

Navigateur

Serveur Web

Adressage

Miage SID 4

Principe

Navigateur

HTTP/GET

Serveur Web

URL

Miage SID 5

Principe

Navigateur

Serveur Web

TomCat

URL

Request

Miage SID 6

Principe

Navigateur

Serveur Web

TomCat

Request

ObjetServletObjet

ServletObjetServlet

Miage SID 7

Principe

Navigateur

Serveur Web

TomCat

Response

ObjetServlet

Miage SID 8

Principe

Navigateur

Serveur Web

TomCat

Response

ObjetServlet

HTML/TXT

Miage SID 9

Principe

Navigateur

Serveur Web

TomCat

ObjetServlet

HTML/TXT

Miage SID 10

Classes Java

Source: Leila Kefi-Khelif

Miage SID 11

Cycle de vie

N’existe pas Instanciation

Initialisation

Disponible

Appel service

Indisponible

Destruction

Miage SID 12

Cycle de vie

N’existe pas Instanciation

Initialisation

Disponible

Appel service

Indisponible

Destruction

Démarragedu conteneur

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

Miage SID 14

Cycle de vie

N’existe pas Instanciation

Initialisation

Disponible

Service

Indisponible

Destruction

Appel de service()

Miage SID 15

Cycle de vie

N’existe pas Instanciation

Initialisation

Disponible

Service

Indisponible

DestructionTimeout ou arrêt

du conteneur

Miage SID 16

Cycle de vie

N’existe pas Instanciation

Initialisation

Disponible

Service

Indisponible

Destruction

Libération

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

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

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)

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

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)

Miage SID 22

Web.xml

• Rajouter :<servlet-mapping>

<servlet-name>HelloServlet</servlet-name>

<url-pattern>/servlet</url-pattern>

</servlet-mapping>

• Tester à nouveau

Miage SID 23

Page d’accueil

• Ajouter une page d’accueil au projet (index.html)

Miage SID 24

Il y a une vie après le développement

• Documentation

• Distribution

• Déploiement

• Tests

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>

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>

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

Miage SID 28

Exercice

• Ecrire une application composée d’un servlet qui affiche « Hello Nancy ! » en utilisant le web-modele fournit

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

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

Miage SID 31

Application « bonjour »

Miage SID 32

Application « bonjour »

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

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

Recommended