Vous êtes sur la page 1sur 30
Chapitre 2 Développement Web avec les technologies JSP/Servlets

Chapitre 2

Développement Web

avec les technologies

JSP/Servlets

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

JSP/Servlets

Sommaire

Architecture d’une application Web

Installation et configuration du Conteneur Tomcat

Les Java Server Pages

Les JavaBeans

Les servlets HTTP

Les bibliothèques de balises JSP

M.Romdhani, INSAT, Décembre 2007

2

JSP/Servlets

Architecture d’une application web

M.Romdhani, INSAT, Décembre 2007

3

JSP/Servlets

Contexte

Utiliser l’Intranet pour l’infrastructure applicative

Protocole standard (HTTP de TCP/IP) Clients légers : Portabilité Architectures multi-tiers

Les technologies Servlets et JSP (J2EE)

Faciliter le développement et le déploiement côté serveur

Embrasser les couches front-end (clients HTML) et back-end (BDD, …)

La spécification des API servlets et des JSP sont indépendantes des serveurs d’applications

M.Romdhani, INSAT, Décembre 2007

4

JSP/Servlets

Architecture-type d’une application web

Couche présentation

Navigateur

Http

HTML, XML

Couche applicative

(logique métier)

Couche de données

Conteneur Web JSP Servlet Composants métier (JavaBeans)
Conteneur Web
JSP
Servlet
Composants métier (JavaBeans)

Base

de

données

Les applications web connaissent un engouement ces derniers temps

La J2EE Facilite le développement d’applications web

M.Romdhani, INSAT, Décembre 2007

5

JSP/Servlets

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-INF/web.xml /WEB-INF/classes/ /WEB-INF/lib/
*.html, *.jsp
/WEB-INF
/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.

M.Romdhani, INSAT, Décembre 2007

6

JSP/Servlets

Installation et configuration du conteneur Web Tomcat

M.Romdhani, INSAT, Décembre 2007

7

 

JSP/Servlets

Le conteneur Apache Tomcat

Tomcat 5/6 (Catalina)

Tomcat 5/6 (Catalina)

Projet Apache (Apache Apache Httpd) Open source Implantation de référence de la spécification

Tomcat 5 : Servlet 2.4 et JSP 2.0 (J2EE 1.4) 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.

M.Romdhani, INSAT, Décembre 2007

8

JSP/Servlets

Arborescence de Tomcat

/bin /common/lib
/bin
/common/lib

/conf

/logs

Arborescence de Tomcat /bin /common/lib /conf /logs /server/lib /shared/lib /webapps scripts startup &
Arborescence de Tomcat /bin /common/lib /conf /logs /server/lib /shared/lib /webapps scripts startup &
/server/lib /shared/lib /webapps
/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

M.Romdhani, INSAT, Décembre 2007

9

JSP/Servlets

Configuration Tomcat

Le fichier server.xml

Server Racine, spécifie le port de shutdown.

Service Associe des connecteurs à un engine.

Connector Ils correspondent à un point d’accès à un service, soit via un serveur soit en connexion directe.

Engine correspond au conteneur de servlet en lui-même.

Logger Ils effectuent la journalisation.

Host Déclare où sont stockées les servlets pour un nom de machine.

Context Chaque Context représente la configuration associée à un chemin dans la hiérarchie

M.Romdhani, INSAT, Décembre 2007

10

JSP/Servlets

Configuration Tomcat (2)

Le fichier server.xml (Le nœud Connector)

port d’écoute
port d’écoute

Un Connector point d’accès utilisable par un client :

• port="8080"

• minProcessors="5"

• maxProcessors="75"

• enableLookups="true"

• acceptCount="100"

• connectionTimeout="20000"

nombre de threads minimum

nombre de threads maximum

DNS inverse

nombre de connections pendantes

Le conteneur Engine

• name="Standalone"

• defaultHost="localhost"

Nom de l’host si pas HTTP 1.1
Nom de l’host si pas HTTP 1.1

M.Romdhani, INSAT, Décembre 2007

11

JSP/Servlets Configuration Tomcat (3) Le fichier server.xml (Le nœud Context) Gestion des associations entre un

JSP/Servlets

Configuration Tomcat (3)

JSP/Servlets Configuration Tomcat (3) Le fichier server.xml (Le nœud Context) Gestion des associations entre un URI

Le fichier server.xml (Le nœud Context)

Tomcat (3) Le fichier server.xml (Le nœud Context) Gestion des associations entre un URI et un
Tomcat (3) Le fichier server.xml (Le nœud Context) Gestion des associations entre un URI et un

Gestion des associations entre un URI et un chemin sur le disque

Un Context représente l’association entre un chemin sur le serveur (URI) et un chemin sur le disque

un chemin sur le serveur (URI) et un chemin sur le disque • path= "/examples" •

• path= "/examples"

• docBase="examples"

• reloadable="true"

M.Romdhani, INSAT, Décembre 2007

URI d’accès Chemin d’accès des fichiers (relatif ou absolu par rapport à webapps) Détection automatique
URI d’accès
Chemin d’accès des fichiers
(relatif ou absolu par rapport à webapps)
Détection automatique des changements
et rechargement si besoin
fichiers (relatif ou absolu par rapport à webapps) Détection automatique des changements et rechargement si besoin
fichiers (relatif ou absolu par rapport à webapps) Détection automatique des changements et rechargement si besoin

12

JSP/Servlets

Les Servlets HTTP

M.Romdhani, INSAT, Décembre 2007

13

JSP/Servlets

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

HttpServletRequest HttpServletResponse
HttpServletRequest
HttpServletResponse

M.Romdhani, INSAT, Décembre 2007

HttpServletResponse M.Romdhani, INSAT, Décembre 2007 Tomcat /admin/* servlet 1 /vignette/*.html /examples/*.html

Tomcat

/admin/*

M.Romdhani, INSAT, Décembre 2007 Tomcat /admin/* servlet 1 /vignette/*.html /examples/*.html servlet 2

servlet 1

/vignette/*.html

/examples/*.html

INSAT, Décembre 2007 Tomcat /admin/* servlet 1 /vignette/*.html /examples/*.html servlet 2 Conteneur de Servlets 14

servlet 2

Conteneur de Servlets

14

JSP/Servlets

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

(depuis juin 1999) : Rajout de PUT, DELETE, OPTIONS, TRACE Navigateur Requête(GET …) Réponse M.Romdhani, INSAT,

Navigateur

Requête(GET …)

de PUT, DELETE, OPTIONS, TRACE Navigateur Requête(GET …) Réponse M.Romdhani, INSAT, Décembre 2007 Serveur 15  

Réponse

M.Romdhani, INSAT, Décembre 2007

Requête(GET …) Réponse M.Romdhani, INSAT, Décembre 2007 Serveur 15   JSP/Servlets Structure d’une

Serveur

15

 

JSP/Servlets

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

M.Romdhani, INSAT, Décembre 2007

16

 

JSP/Servlets

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

M.Romdhani, INSAT, Décembre 2007

17

JSP/Servlets

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

M.Romdhani, INSAT, Décembre 2007

18

JSP/Servlets

HTTP : Informations sur la requête

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain");

GET, POST, PUT etc. Chemin virtuel complet Chemin de la servlet Chemin de la ressource
GET, POST, PUT etc.
Chemin virtuel complet
Chemin de la servlet
Chemin de la
ressource
Chemin sur le serveur

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

}

M.Romdhani, INSAT, Décembre 2007

19

JSP/Servlets Descripteur de déploiement Le fichier web.xml <!DOCTYPE web-app PUBLIC "-//Sun Microsystems,
JSP/Servlets
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>
nomnomnom dedede lalala servletservletservlet
<servlet-mapping>
<servlet-name>maServlet</servlet-name>
<url-pattern>*.test</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>maServlet</servlet-name>
URI d’accès
<url-pattern>/toto</url-pattern>
</servlet-mapping>
URI d’accès
</web-app>
20
M.Romdhani, INSAT, Décembre 2007
 

JSP/Servlets

Le cycle de vie dune Servlet

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

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

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

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

3. la servlet est détruite destroy()

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

M.Romdhani, INSAT, Décembre 2007

21

JSP/Servlets Paramètres d’initialisation d'une servlet Les paramètres sont déclarés dans le fichier web.xml
JSP/Servlets
Paramètres d’initialisation d'une servlet
Les paramètres sont déclarés dans le fichier web.xml
public class InitParamServlet extends HttpServlet {
private int count;
private String message;
L’objet ServletConfig permet de
récupérer les paramètres
public void init(ServletConfig config) throws ServletException {
count = Integer.parseInt(config.getInitParameter("count"));
message = config.getInitParameter("message");
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
<servlet>
<servlet-name>initParam</servlet-name>
<servlet-class>
mRomdhani.InitParamServlet
</servlet-class>
<init-param>
<param-name>count</param-name>
<param-value>5</param-value>
response.setContentType("text/plain");
PrintWriter out= response.getWriter();
for(int i=0;i<count;i++) {
out.println(message);
}
}
}
</init-param>
<init-param>
<param-name>message
</param-name>
<param-value>hello config
</param-value>
</init-param>
</servlet>
22
M.Romdhani, INSAT, Décembre 2007

JSP/Servlets

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 à lINSAT </h1>");

}

}

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

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

M.Romdhani, INSAT, Décembre 2007

23

JSP/Servlets

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 :

de ce s méthodes pour implémenter le service : HttpServletRequest contient les renseignements sur le

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

M.Romdhani, INSAT, Décembre 2007

24

JSP/Servlets

Les Java Server Pages (JSP)

M.Romdhani, INSAT, Décembre 2007

25

JSP/Servlets Les JSP (Java Server Pages) <HTML> <HEAD> <TITLE>Ma toute première
JSP/Servlets
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>
26
M.Romdhani, INSAT, Décembre 2007

JSP/Servlets

Balises JSP dans HTML

Trois types de balises:

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

M.Romdhani, INSAT, Décembre 2007

27

 

JSP/Servlets

Les scriptlets : Les expressions

Syntaxe : <%= expression %>

Exemple :

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

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

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

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

)

M.Romdhani, INSAT, Décembre 2007

28

JSP/Servlets

Les scriptlets : Les Scriptlets

Syntaxe : <% code Java %> (scriplets)

Exemple :

<% String nom = request.getParameter("nom");

out.println("Nom de l'utilisateur " + nom); %>

de l'utilisateur " + nom); %> C’est un bloc de code Java Il est placé dans

C’est un bloc de code Java

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

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

M.Romdhani, INSAT, Décembre 2007

29

 

JSP/Servlets

Directives

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

%>

3 directives possibles :

page : informations relatives à la page informations relatives à la page

include : fichiers à inclure littéralement fichiers à inclure littéralement

taglib : importer des bibliothèques de balises importer des bibliothèques de balises

M.Romdhani, INSAT, Décembre 2007

30

JSP/Servlets

Actions

- Syntaxe à la XML

- Permettent de faire des actions au moment où la page est demandée par un client

Inclure dynamiquement un fichieractions au moment où la page est demandée par un client Utiliser des JavaBeans Rediriger vers

Utiliser des JavaBeansest demandée par un client Inclure dynamiquement un fichier Rediriger vers une autre page M.Romdhani, INSAT,

Rediriger vers une autre pageInclure dynamiquement un fichier Utiliser des JavaBeans M.Romdhani, INSAT, Décembre 2007 31   JSP/Servlets

M.Romdhani, INSAT, Décembre 2007

31

 

JSP/Servlets

Actions (suite)

 

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

 
 

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

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

 

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

associé à <jsp:getProperty <jsp:getProperty

/>

et <jsp:setProperty

/>

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

redirige vers un autre URI/URL

redirige vers un autre URI/URL

<jsp:plugin />

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

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

 

M.Romdhani, INSAT, Décembre 2007

 

32

 

JSP/Servlets

Objets implicites

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

request : le HttpServletRequest : le HttpServletRequest

response : le HttpServletResponse : le HttpServletResponse

session : le HttpSession : le HttpSession

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

application : le ServletContext (idem) : le ServletContext (idem)

config : le ServletConfig de la page : le ServletConfig de la page

M.Romdhani, INSAT, Décembre 2007

33

JSP/Servlets

Les JavaBeans

M.Romdhani, INSAT, Décembre 2007

34

JSP/Servlets

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

M.Romdhani, INSAT, Décembre 2007

35

 

JSP/Servlets

JSP et les JavaBeans

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 …/>

package produits;

 

<HTML> <HEAD><TITLE>Test du Bean </TITLE></HEAD> <BODY> <jsp:useBean id="MonBean" scope="session" class="produits.Produit" type="produits.Produit"/>

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

public String getMarque() { return marque;

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

}

public void setMarque(String marque) { this.marque = marque;

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

}

public int getPrix() { return prix;

}

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>

public void setPrix(int prix) {

 

this.prix = prix;

}

}

   

<HTML>

M.Romdhani, INSAT, Décembre 2007

M.Romdhani, INSAT, Décembre 2007

36

 

JSP/Servlets

Usebean et getProperty()/getProperty()

 

Mécanisme très puissant !

 
 

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

   

/>

Pour lire une propriété du bean :

 
   

<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= * />

M.Romdhani, INSAT, Décembre 2007

 

37

JSP/Servlets

Le design pattern

MVC2

M.Romdhani, INSAT, Décembre 2007

38

JSP/Servlets

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

frontal Un ensemble de contrô leurs spécialisés MVC Model 1 M.Romdhani, INSAT, Décembre 2007 MVC Model

MVC Model 1

M.Romdhani, INSAT, Décembre 2007

spécialisés MVC Model 1 M.Romdhani, INSAT, Décembre 2007 MVC Model 2 39   JSP/Servlets Application Web

MVC Model 2

39

 

JSP/Servlets

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)

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

M.Romdhani, INSAT, Décembre 2007

40

JSP/Servlets Dynamique du modèle MVC2 41 M.Romdhani, INSAT, Décembre 2007
JSP/Servlets
Dynamique du modèle MVC2
41
M.Romdhani, INSAT, Décembre 2007

JSP/Servlets

Les cookies et les sessions HTTP

M.Romdhani, INSAT, Décembre 2007

42

 

JSP/Servlets

Les Cookies

Un cookie est constitué des paires clé=valeur envoyés par le serveur sous forme d’instructions insérées dans l’entête de la réponse HTTP

Un cookie permet :

 
 

d’identifier des utilisateurs (e-commerce, membres  )

)

d’éviter la saisie d’information à répétitiond’identifier des utilisateurs (e-commerce, membres ) o Login, password, adresse, téléphone Gérer des

o Login, password, adresse, téléphone

Gérer des «préférences utilisateur» pour les sites «portails» eur» pour les sites «portails»

Cookie et sécurité :

 
 

Jamais interprété ni exécuté : pas de virus 

Limité à 4KB  Jamais interprété ni exécuté : pas de virus Ne doit pas concerner des données sensibles

Ne doit pas concerner des données sensibles:     Jamais interprété ni exécuté : pas de virus Limité à 4KB M.Romdhani, INSAT,

M.Romdhani, INSAT, Décembre 2007

43

Gestion des cookies

JSP/Servlets

Utiliser les fonctions de l’API des servlets

 

Pour créer un cookie : classe Cookie , Cookie,

écrire/lire un cookie : addCookie(cookie), getCookies(), addCookie(cookie), getCookies(),

positionner des attributs d’un cookie : cookie.setXxx()

)

Exemple d’envoi d’un cookie :

 

String nom = request.getParameter ("nom"); Cookie unCookie = new Cookie("nom", nom);

ici

positionner des attributs si on le désire

response.addCookie(unCookie);

M.Romdhani, INSAT, Décembre 2007

44

 

JSP/Servlets

Suivi de session : Problématique

Protocole HTTP = protocole Internet déconnecté

différent de Telnet, Ftp,é matique Protocole HTTP = protocole Internet déconnecté les requêtes et les réponses ne sont pas

les requêtes et les réponses ne sont pas des transactions= protocole Internet déconnecté différent de Telnet, Ftp, Certaines applications Web (e-commerce : caddie) ont

Certaines applications Web (e-commerce : caddie) ont besoin de maintenir une "mémoire" entre deux requêtes

 

maintenir une connexion de l’utilisateur sur le serveur 

pour se faire : concept de "suivi de sessions"maintenir une connexion de l’utilisateur sur le serveur Une session = ensemble de transactions apparentées d’un

Une session = ensemble de transactions apparentées d’un même utilisateur

M.Romdhani, INSAT, Décembre 2007

45

JSP/Servlets

Suivi de session avec les sevlets Java

But: transfert des données générées par une requête vers les requêtes suivantes

4 méthodes

1) utilisation des cookies (déjà vu)

2) réécriture d'URL : passage de paramètres

3) utilisation des champs de formulaire "hidden"

4) utilisation du JSDK (HttpSession API)

M.Romdhani, INSAT, Décembre 2007

46

JSP/Servlets

Serlvet session

Très simple avec l'API des servlets objet HttpSession

Principe :

Un objet "session" peut être associé avec chaque requête avec chaque requête

Il va servir de "container" pour des informations persistantes persistantes

Durée de vie limitée et réglablede "container" pour des informations persistantes M.Romdhani, INSAT, Décembre 2007 47 JSP/Servlets Exemple de

M.Romdhani, INSAT, Décembre 2007

47

JSP/Servlets

Exemple de Sessions

Programmation simplifiée avec l'API des servlets (JSDK) objet HttpSession

// Dans le code de doPost() HttpSession session = request.getSession(true); Caddy caddy = (Caddy) session.getValue("caddy"); if(caddy != null) { // le caddy n’est pas vide ! afficheLeContenuDuCaddy(caddy); } else { caddy = new Caddy(); caddy.ajouterUnAchat(request.getParameter("NoArticle")); session.putValue("caddy", caddy);

}

M.Romdhani, INSAT, Décembre 2007

48

JSP/Servlets

Les bibliothèques de balises JSP

M.Romdhani, INSAT, Décembre 2007

49

JSP/Servlets

Les bibliothèques de balises

Les bibliothèques de balises personnalisables (custom tags Encapsulent des fonctions complexes à utiliser dans les JSPs Utilisées pour la création d'un contenu dynamique

Ce sont des classes qui implémentent l'interface Tag du Pacakge javax.servlet.jsp.tagext

M.Romdhani, INSAT, Décembre 2007

50

JSP/Servlets 1 <?xml version = "1.0"?> 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
JSP/Servlets
1
<?xml version = "1.0"?>
2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Use taglib directive to
Use taglib
directive to
4
Fig. 10.30
JSP
5
<!-- Fig. 10.30: customTagWelcome.jsp
-->
include
include
use tags in tag library
use tags in tag library
6
<!-- JSP that uses a custom tag to output content. -->
7
8
<%-- taglib directive --%>
9
<%@ taglib uri = "advjhtp1-taglib.tld" prefix = "advjhtp1" %>
10
11
<html xmlns = "http://www.w3.org/1999/xhtml">
12
13
<head>
14
<title>Simple Custom Tag Example</title>
15
</head>
16
17
<body>
18
<p>The following text demonstrates a custom tag: </p>
19
<h1>
Use custom tag welcome
Use custom
tag welcome
20
<advjhtp1:welcome />
to insert text in the JSP
to insert text in the JSP
21
</h1>
22
</body>
23
24
</html>
51
M.Romdhani, INSAT, Décembre 2007
 

JSP/Servlets

1

// Fig. 10.31: WelcomeTagHandler.java

 

2

// Custom tag handler that handles a simple tag.

3

package com.deitel.advjhtp1.jsp.taglibrary;

4

 

5

// Java core packages

       

6

7

8

9

import java.io.*;

// Java extension packages

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

import java.io.*; // Java extension packages import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*;

Class WelcomeTagHandler

Class WelcomeTagHandler

implements interface

implements interface

extending

extending class TagSupport

WelcomeTag -

Handler

handler.

by

Tag by

Tag

class TagSupport

10

   

11

12

public class WelcomeTagHandler extends TagSupport {

13

14

// Method called to begin tag processing

   

JSP container calls method

JSP container calls method

Lines 15-32

 

15

16

17

public int doStartTag() throws JspException

{

// attempt tag processing

doStartTag

doStartTag

when it encounters

when it encounters

the starting custom tag

the starting custom tag

Line 20

18

try {

 

19

20

21

22

23

24

// obtain JspWriter to output content

JspWriter out = pageContext.getOut();

to output content JspWriter out = pageContext.getOut(); // output content out.print( "Welcome to JSP Tag

// output content

out.print( "Welcome to JSP Tag Libraries!" );

}

 

Use custom tag handler’s

Use custom tag handler’s

to obtain

pageContext to obtain

object

object

pageContext

JSP’s JspWriter

JSP’s JspWriter

for outputting text

for outputting text

 

25

 

26

// rethrow IOException to JSP container as JspException

 

27

catch( IOException ioException ) {

28

throw new JspException( ioException.getMessage() );

 

29

}

30

31

return SKIP_BODY; // ignore the tag's body

32

}

33

}

M.Romdhani, INSAT, Décembre 2007

 

52

 

JSP/Servlets

1

<?xml version = "1.0" encoding = "ISO-8859-1" ?>

 

2

<!DOCTYPE taglib PUBLIC

 

3

"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"

 

4

"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

   

5

6

<!-- a tag library descriptor -->

       

7

 

Define custom-tag

Define custom-tag

file advjhtp1 -

taglib .tld

.

library descriptor file

library descriptor file

8

9

<taglib>

<tlibversion>1.0</tlibversion>

 

10

<jspversion>1.1</jspversion>

   

11

<shortname>advjhtp1</shortname>

12

13

14

15

<info>

A simple tab library for the examples

</info>

tag

welcome

welcome

element describes

tag element describes

Line 18

custom tag

custom tag

 

16

   

17

<!-- A simple tag that outputs content --> <tag>

<!-- A simple tag that outputs content -->

<tag>

   

18

   

Specify custom tag

Specify custom tag

 

19

20

<name>welcome</name>

 
19 20 <name> welcome </name>   name and class name and class

name and class

name and class

21

<tagclass>

   

22

com.deitel.advjhtp1.jsp.taglibrary.WelcomeTagHandler

23

</tagclass>

 

24

25

<bodycontent>empty</bodycontent>

 

26

27

<info>

 

28

Inserts content welcoming user to tag libraries

 

29

</info>

 

30

</tag>

31

</taglib>

 

M.Romdhani, INSAT, Décembre 2007

 

53

JSP/Servlets

La JSTL (JSP Standard Tag Library)

et le langage EL

M.Romdhani, INSAT, Décembre 2007

54

JSP/Servlets

JSTL

Depuis la version JSP 1.2

Spécification développé par le groupe d’experts JSR 52

Collection de Tag Librairies personnalisées qui implémentent la plus part des fonctions communes aux pages web:

Itérations et conditions (core)

Formatage des données (format)

Manipulation de XML (xml)

Accès au bases de données (sql)

Utilisation du langage EL (Expression Language)

Avantages

Code simple, lisible et facile à maintenir

Le concepteur de page est libéré de code Java

Évite au développeur d’écrire à chaque fois les fonctions de bases.

M.Romdhani, INSAT, Décembre 2007

55

JSP/Servlets

EL: Expression Language

Spécification de EL sous l’autorité du groupe d’expert JSR-152 pour JSP 1.3

Le JSR-52 et JSR-152 travail ensemble sur la spécification de l’Expression Language

En JSTL il est utilisé uniquement dans la valeur d’un attribut:

<prefix:tag attr1="${ expr }" />

Il est invoqué exclusivement via la syntaxe ${ expr }

M.Romdhani, INSAT, Décembre 2007

56

JSP/Servlets

EL: Expression Language

objets prédéfinies

Un identificateur dans EL fait référence à une variable retourné par l’appel de pageContext.findAttribute(identificateur) et qui est dans la portée (scope): page, request, session ou application.

${ var } = pageContext.getAttribute("var")

Objets implicites:

pageScope, requestScope, sessionScope, applicationScope

Accès au paramètres d’une requête HTTP via param (objet de type Map) et paramValue

Un objet implicite pageContext qui donne accès aux propriétés associés au contexte de la page JSP

M.Romdhani, INSAT, Décembre 2007

57

 

JSTL

JSP/Servlets

core tag library

Fonctions de base

 

Affichage <c: out value=" expression " />

Affichage <c: out value=" expression " />

<%= expression %>

Affectation <c:set value="value" var=" varName " scope=" application " /> <% pageContext.setAttribute("varName",value,SCOPE) %>

varName " scope=" application " /> <% pageContext.setAttribute("varName",value,SCOPE) %>

Exception java.lang.Throwable <c:catch [var="varName"] > actions a surveiller </c:catch>

<% try{ actions à surveiller }catch(Throwable varName){}

<% try{ actions à surveiller }catch(Throwable varName){}

 

%>

M.Romdhani, INSAT, Décembre 2007

 

58

JSP/Servlets JSTL core tag library Les conditions 1- simple if(cond) <c:if test="${user.visitCount = =
JSP/Servlets
JSTL
core tag library
Les conditions
1- simple
if(cond)
<c:if test="${user.visitCount = = 1}">
<c:out value="Première visite.Bienvenue!" />
</c:if>
<% if(user.visitCount == 1){ %>
<%= "Prmière visite.Bienvenue" %>
<% } %>
2-choix multiple
if/else
<c:choose>
<% If(count == 0){ %>
<c:when test="${count == 0}”>
<%= Votre compte est vide %>
Pas de visite!
<% }else{ %>
</c:when>
<%= count+"visiteurs" %>
<c:otherwise>
<% } %>
<c:out value="${count}"/> visiteurs.
</c:otherwise>
</c:choose>
59
M.Romdhani, INSAT, Décembre 2007
 

JSP/Servlets

JSTL

core tag library

Les itérations avec la boucle for/while

en JSP

<%@page import="java.util.*" %> <% Member user = null; Collection users = session.getAttribute("members"); Iterator it = users.iterator(); while(it.hasNext()){ user = (Member) it.next(); %> <%= "nom: "+user.getName() %> <% } %>

 

en JSTL

forEach

<c:forEach var=”user” items=”sessionScope.members” [begin] [end] [step]> <c:out value="nom: ${user.name}" /> </c:forEach>

 

M.Romdhani, INSAT, Décembre 2007

60