Chapitre 2 Développement Web avec les technologies JSP/Servlets

39
Chapitre 2 Développement Web avec les technologies JSP/Servlets

description

Chapitre 2 Développement Web avec les technologies JSP/Servlets. Sommaire. Architecture d’une application Web Installation et configuration du Conteneur Tomcat Les servlets HTTP Les Java Server Pages Les JavaBeans Les Filtres HTTP Le design pattern MVC2. - PowerPoint PPT Presentation

Transcript of Chapitre 2 Développement Web avec les technologies JSP/Servlets

Page 1: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

Chapitre 2

Développement Webavec les technologies

JSP/Servlets

Page 2: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

2M.Romdhani, INSAT, Mars 2009

Sommaire

Architecture d’une application Web

Installation et configuration du Conteneur Tomcat

Les servlets HTTP

Les Java Server Pages

Les JavaBeans

Les Filtres HTTP

Le design pattern MVC2

Page 3: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

3M.Romdhani, INSAT, Mars 2009

Architecture d’une application web

Page 4: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

5M.Romdhani, INSAT, Mars 2009

Architecture-type d’une application web

Navigateur

Conteneur Web

JSP

Servlet

Base

de

données

Http

HTML, XML

Couche présentation Couche applicative(logique métier)

Couche de données

Les applications web connaissent un engouement ces derniers temps

La J2EE Facilite le développement d’applications web

Composants métier (JavaBeans)

Page 5: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

6M.Romdhani, INSAT, Mars 2009

Structure d’une application Web

Une application Web possède dans un repertoire lui-même dans webapps une architecture spécifique

*.html, *.jsp

/WEB-INF/web.xml

/WEB-INF/classes/

/WEB-INF/lib/

Pages HTML et JSP

fichier de configuration (XML)

classes des servlets et de beans

fichiers jar des servlets et utilitaires

L’ensemble des fichiers et répertoire peut être mis dans un war (Web Archive) grâce à la commande jar. Le war est automatiquement dé-jarré s’il est placé dans le répertoire webapps.

/WEB-INF

MaWebApp

Page 6: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

7M.Romdhani, INSAT, Mars 2009

Installation et configuration du conteneur Web

Tomcat

Page 7: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

8M.Romdhani, INSAT, Mars 2009

Le conteneur Apache Tomcat

Tomcat 6 (Catalina) Projet Apache (Apache Apache Httpd) Open source Implantation de référence de la spécification Tomcat 6 : Servlet 2.5 et JSP 2.1 (Java EE 5)

Suite à l’installation de Tomcat, positionner les 2 variables d’environnement suivantes :JAVA_HOME : Elle doit pointer le répertoire

d’installation du JDK

CATALINA_HOME : Elle doit pointer le répertoire d’installation de Tomcat.

Page 8: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

9M.Romdhani, INSAT, Mars 2009

Arborescence de Tomcat

/bin/common/lib/conf/logs/server/lib/shared/lib/webapps

scripts startup & shutdown

jar utilisés par Tomcat (Ant, Servlet, etc.)

configuration: server.xml, web.xml, users.xml

fichiers de logs

fichiers jar propres à Tomcat

fichiers jar communs à toutes les servlets

zone de déploiement

Page 9: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

10M.Romdhani, INSAT, Mars 2009

Les Servlets HTTP

Page 10: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

11M.Romdhani, INSAT, Mars 2009

Programmation HTTP en J2EE

J2EE offre une spécification standard d'une API (javax.servlet.http) permettant de programmer HTTP. Les programmes traitant des reqêtes HTTP sont appelés servlets.

Un conteneur standard, open source, et gratuit appelé Tomcat est disponible dans le cadre du projet Apache

L'objet représentant la requête HTTP s'appèle HttpServletRequest. La réponse HTTP est représentée par l'objet HttpServletResponse.

Les programmes côté serveur récupèrent leurs entrées à partir de HttpServletRequest et écrivent leurs sorties dans HttpServletResponse

Pour retourner du code HTML, on doit définir un flôt séquentiel de caractères à partir de l'object HttpServletResponse

Browser Web

Conteneur de Servlets

/admin/*

/vignette/*.html

/examples/*.html

servlet 1

servlet 2

HttpServletRequest

Tomcat

HttpServletResponse

Page 11: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

12M.Romdhani, INSAT, Mars 2009

Rappels concernant HTTP

Hyper Text Transfert Protocol (HTTP) protocole de RPC pour le web, sans état accès et récupération de ressources nommage des ressources : URL les données transmises sont décrites au moyen des types MIME messages

HTTP 1.0 : GET, POST, HEAD HTTP 1.1 (depuis juin 1999) : Rajout de PUT, DELETE, OPTIONS,

TRACE

Requête(GET …)

Réponse

ServeurNavigateur

Page 12: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

13M.Romdhani, INSAT, Mars 2009

Structure d’une requête HTTP Anatomie d’une requête :

ligne de requête commande : GET, POST nom de la ressource version du protocole (ex. HTTP/1.1)

champs d’en-tête: informations additionnelles concernant la requête et le client (nom:valeur)

Ligne vide corps de la requête: informations supplémentaires (plutôt pour les POST)

Requêtes GET Variables visibles dans l'URL Limitation de la taille (dépend de l'OS) Simplicité d'extraction des données Données dans le fichier log

Requêtes POST Les variables ne sont pas visibles dans l'URL Les variables sont envoyées dans les entêtes HTTP Pas de limitation de la taille Possibilité d'upload

Page 13: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

14M.Romdhani, INSAT, Mars 2009

Structure d’une réponse HTTP

Anatomie d’une réponse : ligne de requête

version du protocole (ex. HTTP/1.0) statut de la réponse (ex. 404) explication du statut (ex. not found)

champs d’en-tête informations additionnelle concernant le serveur et le document retourné (syntaxe =

nom:valeur) corps de la requête

la ressource retournée (page HTML)

Statut des réponse 100-199 : informations 200-299 : Requête réussie

200 : OK, 204: No Content, 205: Reset Content 300-399 : Requête redirigée, ou d'autres actions nécessaires 400-499 : requête incomplète

401 : UnAuthorized, 403: Forbidden, 404 : Not Found, 407: Proxy Authentification Required 500-599 : Réponse incomplète ou erronée (erreur du serveur)

500 : Internal Server Error, 501 : Not Implemented

Page 14: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

15M.Romdhani, INSAT, Mars 2009

La ServletRequest et la ServletResponse

L'interface ServletRequest permet de récupérer les paramètres de la requête :

public abstract int getContentLength() public abstract String getContentType() public abstract String getProtocol() public abstract String getScheme() public abstract String getServerName() public abstract int getServerPort() public abstract String getRemoteAddr() public abstract String getRemoteHost() public abstract ServletInputStream getInputStream()

throws IOException public abstract String getParameter(String name) public abstract String[] getParameterValues(String name) public abstract Enumeration getParameterNames() public abstract Object getAttribute(String name)

L'interface ServletResponse permet de renvoyer une réponse :

public abstract void setContentLength(int length) public abstract void setContentType(String type) public abstract ServletOutputStream getOutputStream() throws IOException

Page 15: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

16M.Romdhani, INSAT, Mars 2009

HTTP : Informations sur la requête

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); PrintWriter out= response.getWriter(); out.println("Protocol: " + request.getProtocol()); out.println("Scheme: " + request.getScheme()); out.println("ServerName: " + request.getServerName()); out.println("ServerPort: " + request.getServerPort()); out.println("RemoteAddr: " + request.getRemoteAddr()); out.println("RemoteHost: " + request.getRemoteHost()); out.println("Method: " + request.getMethod()); out.println("requestuestURI: " + request.getRequestURI()); out.println("ServletPath: " + request.getServletPath()); out.println("PathInfo: " + request.getPathInfo()); out.println("PathTranslated: " + request.getPathTranslated()); out.println("QueryString: " + request.getQueryString()); out.println("RemoteUser: " + request.getRemoteUser()); out.println("AuthType: " + request.getAuthType()); }

GET, POST, PUT etc.

Chemin virtuel complet

Chemin de laressource

Chemin sur le serveur

Chemin de la servlet

Page 16: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

17M.Romdhani, INSAT, Mars 2009

Descripteur de déploiement

Le fichier web.xml

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"    "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<web-app> <display-name>Mon application Web</display-name> <servlet> <servlet-name>maServlet</servlet-name> <servlet-class>mRomdhani.MaServlet</servlet-class> </servlet>

<servlet-mapping> <servlet-name>maServlet</servlet-name> <url-pattern>*.test</url-pattern> </servlet-mapping>

<servlet-mapping> <servlet-name>maServlet</servlet-name> <url-pattern>/toto</url-pattern> </servlet-mapping></web-app>

nom de la servletnom de la servletnom de la servlet

URI d’accès

URI d’accès

Page 17: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

18M.Romdhani, INSAT, Mars 2009

Le cycle de vie d’une Servlet

1. la servlet est crée puis initialisée init()

2. le service du client est implémenté service()

3. la servlet est détruite destroy()

Cette méthode n’est appelée par le serveur qu’une seule fois lors du chargement en mémoire par le moteur (ou conteneur) de servlet

Cette méthode est appelée automatiquement par le serveur à chaque requête de client

Cette méthode n’est appelée par le serveur qu’une seule fois à la fin permet de libérer des ressources (allouées par init() )

Page 18: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

19M.Romdhani, INSAT, Mars 2009

Un exemple de Servlet

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html><head><title>Mon adorable Servlet </title> </head>");

out.println("<body><h1>Bienvenue à l’INSAT </h1>");

out.println("</body>");

out.println("</html>");

}

}

Page 19: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

20M.Romdhani, INSAT, Mars 2009

Les méthodes doGet() et doPost()

Utiliser les objets HttpServletRequest et HttpServletResponse passés en paramètres de ces méthodes pour implémenter le service :

HttpServletRequest contient les renseignements sur le formulaire

HTML initial (utile pour doPost()) - La méthode getParameter() récupère les paramètres d’entrée

HttpServletResponse contient le flux de sortie pour la génération

de la page HTML résultat (getWriter() )

Page 20: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

21M.Romdhani, INSAT, Mars 2009

Les Java Server Pages(JSP)

Page 21: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

22M.Romdhani, INSAT, Mars 2009

Les JSP (Java Server Pages)

<HTML>

<HEAD>

<TITLE>Ma toute première JSP</TITLE>

</HEAD>

<BODY>

<H1> Ceci est ma toute première JSP </H1>

Nous sommes le :

<% java.util.Date d = new java.util.Date();

out.println(d.toString());

%>

<P>

Au revoir et à bientôt

</BODY>

</HTML>

Page 22: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

23M.Romdhani, INSAT, Mars 2009

Balises JSP dans HTML

1 – Les scriptlets : du code java

2 – Les directives : pour le contrôle de la structure

3 – Les actions : pour le contrôle de la logique lors de l'appel à la page

Trois types de balises:

Page 23: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

24M.Romdhani, INSAT, Mars 2009

Les scriptlets : Les expressions

Ceci permet d’intégrer des valeurs dans le code HTML

Les valeurs sont évaluées, converties en chaînes de caractères et affichées

Syntaxe : <%= expression %>

Exemple :Il est <%= new java.util.Date() %> <P>et votre hostname est <%= request.getRemoteHost() %>

Les objets implicites (request, response, session, out, ...) disponibles

Page 24: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

25M.Romdhani, INSAT, Mars 2009

Les scriptlets : Les Scriptlets

C’est un bloc de code Java

Il est placé dans _jspService() de la servlet générée ayant accès :

Syntaxe : <% code Java %> (scriplets)

Exemple :<% String nom = request.getParameter("nom"); ... out.println("Nom de l'utilisateur " + nom);%>

o aux variables et beans déclarés ( <%! … %> ) o aux objets implicites

Page 25: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

26M.Romdhani, INSAT, Mars 2009

Directives

page : informations relatives à la page

include : fichiers à inclure littéralement

Syntaxe : <%@ directive attribut1="valeur" attribut2="valeur"... %>

3 directives possibles :

taglib : importer des bibliothèques de balises

Page 26: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

27M.Romdhani, INSAT, Mars 2009

Actions

Inclure dynamiquement un fichier

- Permettent de faire des actions au moment où la page

est demandée par un client

Utiliser des JavaBeans

Rediriger vers une autre page

- Syntaxe à la XML

Page 27: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

28M.Romdhani, INSAT, Mars 2009

Inclusion au moment où la page est servie, pas au moment où elle est traduite en servlet.

permet d'instancier un bean depuis une page JSP. associé à <jsp:getProperty.../> et <jsp:setProperty.../>

<jsp:include page="relative URL" flush="true" />

<jsp:usebean id="name" class="package.class" />

<jsp:forward page="/unAutreURI" />

redirige vers un autre URI/URL

Actions (suite)

<jsp:plugin />

Appèle le plugin Java à l’intérieur du navigateur

Page 28: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

29M.Romdhani, INSAT, Mars 2009

Objets implicites

request : le HttpServletRequest

response : le HttpServletResponse

Ce sont des variables prédéfinies accessibles dans les scriptlets :

session : le HttpSession

out : flot de sortie (idem response.getWriter())

application : le ServletContext (idem)

config : le ServletConfig de la page

Page 29: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

30M.Romdhani, INSAT, Mars 2009

Les JavaBeans

Page 30: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

31M.Romdhani, INSAT, Mars 2009

Notion de JavaBean

Un JavaBean est un POJO qui définit des méthodes qui exécuteront la logique métier afin décharger la servlet ou la JSP de le faire.

Se conformer aux design pattern MVC qui vise la séparation des propos afin de faciliter la maintenance des applications Web

Un JavaBean est un composant Java permettant de réaliser un traitement métier spécifique

Attributs simples Méthodes set/get permettant l’introspection

En simplifiant, on peut voir les JavaBeans comme des classes semblables aux autres, si ce n'est qu'ils proposent des méthodes « accesseurs » pour accéder à leurs attributs.

Les JavaBeans sont crées automatiquement et gérées par le conteneur

Les JavaBeans sont déployés sous WEB-INF/classes

Page 31: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

32M.Romdhani, INSAT, Mars 2009

JSP et les JavaBeans

package produits;

public class Produit { private String marque; private int prix ;

public String getMarque() {return marque;

} public void setMarque(String marque) {

this.marque = marque; } public int getPrix() {

return prix; } public void setPrix(int prix) {

this.prix = prix; }}

Développer le Bean et le déployer sous WEB-INF/classes

Référencer le Bean dans la JSP avec l'action <jsp:usebean …/>

<HTML> <HEAD><TITLE>Test du Bean </TITLE></HEAD> <BODY> <jsp:useBean id="MonBean" scope="session"

class="produits.Produit" type="produits.Produit"/>

Définition de la marque et du prix :<P>

<jsp:setProperty name="MonBean" property="marque" value="Dell" /> <BR> <jsp:setProperty name="MonBean" property="prix" value="2900" /> <BR>

Récupération de la marque et du prix du produit :<P> La marque est:<jsp:getProperty name="MonBean" property="marque" /> <BR> Le prix est:<jsp:getProperty name="MonBean"

property="prix" /> <BR> </BODY><HTML>

Page 32: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

33M.Romdhani, INSAT, Mars 2009

Usebean et getProperty()/getProperty()

Mécanisme très puissant !

Pour lire une propriété du bean :

<jsp:usebean id="name" (référence l'instance du composant) class="paquetage.class" (nom qualifié de la classe) scope="page|request|session|application" (portée)/>

<jsp:getProperty name="name" property="property"  

/>

Pour modifier une propriété du bean :

<jsp:setProperty name="name" property="property"  value="valeur"

/>

Pour modifier tous les attributs avec les paramètres HTTP de même nom : <jsp:setProperty name="name" property= * />

Page 33: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

34M.Romdhani, INSAT, Mars 2009

Les Filtres HTTP

Page 34: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

35M.Romdhani, INSAT, Mars 2009

Les filtres

ServletFiltre Filtre

Requête

RequêteRequête

Réponse

RéponseRéponse

Hello World

Hello World Filtré

Page 35: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

36M.Romdhani, INSAT, Mars 2009

Les filtres

Il est possible d’ajouter des filtres qui seront exécutés avant les servlets

<filter> <filter-name>footer</filter-name> <filter-class>fr.umlv.servletdemo.FooterFilter</filter-class> </filter>

<filter-mapping> <filter-name>footer</filter-name> <url-pattern>/filter/*</url-pattern> </filter-mapping>

<filter-mapping> <filter-name>footer</filter-name> <servlet-name>hello</servlet-name ></filter-mapping>

Filtre à partir d’un URL

Filtre à partir d’une servlet

Page 36: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

37M.Romdhani, INSAT, Mars 2009

Les filtres

Des wrappers permettent d’interagir avec la servlet

public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain) throws IOException, ServletException {

response.setContentType("text/html"); PrintWriter out=response.getWriter(); out.println("<html><body bgcolor=\"white\"><h1>");

HttpServletResponseWrapper newResponse=new HttpServletResponseWrapper( (HttpServletResponse)response) { public void setContentType(String contentType) { } }; chain.doFilter(request,newResponse);

// context.getRequestDispatcher("/footer.html").include(request,response);

out.println("</h1></body></html>"); }

Appelle les autres filtresou la servlet

Exécuté avant

Exécuté après

Page 37: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

38M.Romdhani, INSAT, Mars 2009

Le design pattern MVC2

Page 38: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

39M.Romdhani, INSAT, Mars 2009

MVC 1 et MVC 2

MVC Model 1 et MVC Model 2 différent essentiellement en ce qui concerne l'entité responsable au traitement de la requête.

Dans le Model 1, c'est la JSP qui se charge de la requête Dans le Model 2, c'est une servlet (Controller) qui fait le

travail Un seul contrôleur frontal Un ensemble de contrôleurs spécialisés

MVC Model 1 MVC Model 2

Page 39: Chapitre 2 Développement Web avec les technologies  JSP/Servlets

JSP/Servlets

40M.Romdhani, INSAT, Mars 2009

Application Web selon le MVC2

L ’architecture MVC (Model-View-Controller) a pour but d ’organiser une application interactive en séparant : les données -> le modèle constitué des objets

métiers la représentation des données -> la vue qui

restitue les informations vers l'utilisateur le comportement de l ’application -> le

contrôleur chargé de l'acquisition d'informations en provenance de l'utilisateur

Organisation du MVC1 (Model1)

Modèle : JavaBeans Vue : Pages JSP Contrôleur : Page JSP

Organisation du MVC2 (Model2)

Modèle : JavaBeans Vue : Pages JSP Contrôleur : Servlet qui dirige les actions à effectuer en fonction de la requête émise par le client