Vous êtes sur la page 1sur 47

-DYD F{Wp VHUYHXU 6HUYOHWV HW -63

Patrick Itey INRIA - Sophia Antipolis


Patrick.Itey@sophia.inria.fr http://www.inria.fr/acacia/personnel/itey

Plan du cours
" " "

Rappel sur les applications Web Servlets et JSP : cest quoi ? Compilation / installation / configuration dun serveur Web compatible Premire servlet ou comment dmarrer ? Grer les formulaires HTML Servlets et bases de donnes Gestion des cookies

" " " "

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 2

Plan (suite)
" " " "

La gestion de session Les Java Server Pages (JSP) Des liens Des Tds

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 3

$SSOLFDWLRQV :HE
Internet/Intranet

Serveur

Client

Requte (http,)

Environnement d excution

Serveur Web

2e niveau

Script/programme serveur

Navigateur Web

Rponse

Source de donnes

3e niveau

1er niveau
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 4

$UFKLWHFWXUH

3 niveaux : n niveau 1: prsentation


navigateur

+ serveur Web

n niveau 2: applicatif
script

ou programme

n niveau 3: donnes
donnes

ncessaires au niveau 2

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 5

'pURXOHPHQW

Une application Web type :


n 1: recueille les donnes utilisateur (niveau 1) n 2: envoie une requte au serveur Web n 3: excute le programme serveur requis (niveau 2&3) n 4: assemble/renvoie les donnes vers le navigateur
(niveau 1)

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 6

 &ROOHFWH GHV GRQQpHV XWLOLVDWHXU

Quelques solutions pour le client : n trs utilise : formulaire HTML


saisie

de champs puis submit validation par scripts (javaScript)

n nouvelle : applets Java :


connexion

socket / RMI avec le serveur Web mise en forme et validation des donnes

n ...

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 7

 5HTXrWH +773 YHUV OH VHUYHXU :HE


n contient :
l URL de la ressource accder (page,script,prog) les donnes de formatage (le cas chant) des infos d en-tte complmentaires

n requte GET :

pour extraire des informations sur le serveur intgre les donnes de formatage l URL
http://www.inria.fr/servlet/hello?key1= value1&

n requte POST :
pour modifier les donnes sur le serveur donnes de la page assembles/envoyes vers le serveur

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 8

 ([pFXWLRQ G XQ VFULSWSURJ VHUYHXU

Avec la requte http, le serveur Web :


n identifie le type d environnement d exploitation
charger (mapping)
en ou

fonction de l extension du fichier (.jsp, .cgi, ...) du rpertoire o il se trouve (cgi-bin/, servlet/)

n charge l environnement d excution (run-time)


interprteur JVM

Perl pour les programmes cgi en perl pour les servlets Java, ...

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 9

 5HWRXU GHV UpVXOWDWV DX QDYLJDWHXU

Le script/prog ct serveur : n prcise le type de contenu (HTML, XML, images,) n intgre la rponse dans un flot de sortie Le navigateur : n dfinit le type MIME dans l en-tte (text/html,) n et affiche les donnes en fonction
duplication

de l environnement (variables, excution), mmoire alloue, copie du programme, retourne (en gnral) du HTML
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 10

7HFKQLTXHV F{Wp VHUYHXU


CGI (Common Gateway Interface) ISAPI, NSAPI (Netscape, Microsoft) ASP (Microsoft) Servlets Java et JSP (Sun)

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 11

&*, UDSSHO
n Principe :
un

processus par requte est lanc sur le serveur

Serveur Web Interface CGI Processus 1 Env. execution Var. env. Programme Processus 2 Env. execution Var. env. Programme Processus 3 Env. execution Var. env. Programme

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 12

&*, VXLWH
n Avantages :
gratuit, peut

pris en charge par tous les serveurs Web actuels tre crit dans nimporte quel langage (surtout perl)

n Inconvnients :
manque

d volutivit (plusieurs processus crs) g serveur trs sollicit si plusieurs requtes au mme moment g amlior par : FastCGI : instance partage des programmes CGI mod_perl (Apache) : script CGI interprt et excut dans le serveur Web assez lent parfois difficile dvelopper
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 13

Servlets et JSP

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 14

Java Servlets

Rponse de Java aux CGI Programmes s'excutant sur le serveur Web et retournant des pages Web dynamiques ( la vole) Peuvent tre chargs localement ou dynamiquement travers le rseau

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 15

6HUYOHWV YV &*,


Plus efficaces Plus pratiques Plus puissantes Portables Gratuites

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 16

Servlets plus efficaces


"

Rsidentes, pas de fork, pas de temps de lancement Multithreads Gestion de cache Connexions persistantes (BD) etc...

" " " "

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 17

*HVWLRQ GHV VHUYOHWV


Moteur de Servlets
Crer un pool de threads Instancier la servlet

Thread

Thread Servlet
Initialisation

Appeler la mthode init()

Affecter une requte un thread Requte HTTP 1 Affecter une requte un thread Requte HTTP 2 Rponse HTTP 1 Rponse HTTP 2 Terminer le pool de threads Appeler la mthode destroy()

Appeler la mthode service() Excution service

Appeler la mthode service()

Excution service

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 18

Servlets plus pratiques


"

H, c'est du Java ! Super API pour grer les formulaires HTML, les cookies, le suivi de session, le protocole HTTP devient facile manipuler
"

" "

"

manipuler les headers Http

"

Plus facile utiliser que cgi/perl

Patrick Itey - INRIA Servlets & JSP - page 19

16/09/2000

Servlet plus puissantes


"

On peut faire des choses impossibles raliser avec des scripts CGI
n n n n n n
Parler avec le serveur WWW, Echanger des donnes via URIs, Partager des donnes entre servlets, Chaner des servlets (pool de connections BD), Gestion de sessions (e-commerce), etc...

Servlets & JSP - page 20

16/09/2000

Patrick Itey - INRIA

10

Servlets portables
"

Cest du Java ! Supportes par tous les serveurs WWW


"

"

Apache, Microsoft IIS, WebStar,

"

directement ou via des plugins/patches

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 21

Servlets gratuites
"

Kit de dveloppement des servlets gratuit Nombreuses versions commerciales... (Microsoft, Netscape I-server, Webstar...) Mais Apache/Tomcat reste la solution la plus efficace... 100% gratuite !

"

"

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 22

11

6HUYOHWV YV DSSOHWV

Les servlets sont le pendant des applets ct serveur


n mais sans interface graphique utilisateur
elle

est limite la puissance du langage HTML

n par contre, elles ne sont pas astreintes aux mmes


rgles de scurit que les applets
peuvent

tablir une connexion avec dautres clients (RMI, ) peuvent faire des appels systme (utilisation pont JDBCODBC) ou manipuler des ressources locales (sur le serveur), ...
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 23

$YDQWDJHV HW LQFRQYpQLHQWV

Avantages : n plus facile dvelopper n meilleures performances n client lger " Inconvnient : n interface graphique utilisateur limite HTML

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 24

12

Les JSP (Java Server Pages)


" "

Rponse aux ASP/PHP/embedded perl, etc... Technologie qui permet de mixer Java et HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD><TITLE>Welcome to Our Store</TITLE></HEAD> <BODY> <H1>Welcome to Our Store</H1> <SMALL>Welcome, <!-- User name is "New User" for first-time visitors --> <% out.println(Utils.getUserNameFromCookie(request)); %> To access your account settings, click <A HREF="Account-Settings.html">here.</A></SMALL> <P> Regular HTML for all the rest of the on-line stores Web page. </BODY></HTML>
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 25

Avantages des JSPs


" "

Vs ASP : c'est du Java, a suffit non ? Vs Servlets : plus pratique. Sparation du look et du traitement. 100% quivalent. Vs JavaScript : Javascript tourne sur le client Vs HTML/Dynamic HTML : idem. JSP est trs facile mettre en oeuvre !

Patrick Itey - INRIA Servlets & JSP - page 26

" "

"

16/09/2000

13

Servlets/JSP API, configuration dun serveur WWW compatible

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 27

Kits de dveloppement Servlets et JSP

Rcuprer JSWDK (Servlet 2.1/2.2 & JSP 1.0/1.1)


" "

http://java.sun.com/products/servlets Dire javac o trouver les packages ncessaires : CLASSPATH=.:servlet_dir/servlet.jar:servlet_dir/jsp.jar

"

Conseil : mettez vos propres servlets dans un package ! (classpath...)

"

Installer un serveur WWW qui supporte les servlets

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 28

14

Quel serveur WWW ?


"

2 possibilits
" "

installer un serveur qui a le support intgr pour les servlets ajouter votre serveur WWW actuel un package qui supporte les servlets

" " " " "

Apache Tomcat (servlets 2.2, JSP 1.1) Java Server Web Development Kit (moteur) Allaire Jrun New Atlanta Server Exec Sun Java Web Server...

Patrick Itey - INRIA Servlets & JSP - page 29

16/09/2000

Premires Servlets

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 30

15

0RGqOH GH SURJUDPPDWLRQ

Une servlet doit implmenter linterface


javax.servlet.Servlet

n soit directement, n soit en drivant dune classe implmentant dj cette interface


comme (GenericServlet ou HttpServlet )

cette interface possde les mthodes pour : n initialiser la servlet : init() n recevoir et rpondre aux requtes des clients : service() n dtruire la servlet et ses ressources : destroy()

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 31

6WUXFWXUH GH EDVH G
XQH VHUYOHW
import javax.servlet.*; public class first implements Servlet { public void init(ServletConf config) throws ServletException {} public void service( ServletRequest req, ServletResponse rep) throws ServletException, IOException {}

public void destroy() {} }

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 32

16

/H F\FOH GH YLH
1. la servlet est cre puis initialise (init() )

cette mthode nest appele par le serveur quune seule fois lors du chargement en mmoire par le moteur de servlet
)

2. le service du client est implment (service()

cette mthode est appele automatiquement par le serveur chaque requte de client

3. la servlet est dtruite (destroy() )


cette mthode nest appele par le serveur quune seule fois la fin permet de librer des ressources (alloues par init() )

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 33

8QH VHUYOHW :HE  HttpServlet

Pour faciliter le traitement particulier des serveurs Web, la classe Servlet est affine en
javax.servlet.http.HttpServlet

n 2 mthodes remplacent service() de la classe mre :


doGet() : pour les requtes Http de type GET doPost() : pour les requtes Http de type POST

n la classe servlet doit obligatoirement contenir lune ou lautre de


ces 2 mthodes redfinie, choisie selon le mode denvoi du formulaire HTML qui l'excute

n service() de HttpServlet appelle automatiquement la bonne


mthode en fonction du type de requtes Http
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 34

17

6TXHOHWWH G XQH VHUYOHW +WWS *(7


import javax.servlet.*; import javax.servlet.http.*; public class SimpleServlet extends HttpServlet { public void init(HttpServletConfig c) throws ServletException {} public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {} public void destroy() {} public String getServletInfo() {} }

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 35

/HV PpWKRGHV GR*HW HW GR3RVW

Utiliser les objets HttpServletRequest et HttpServletResponse passs en paramtres de ces mthodes pour implmenter le service :
n HttpServletRequest contient les renseignements sur le
formulaire HTML initial (utile pour doPost()) :

la mthode getParameter() rcupre les paramtres dentre

n HttpServletResponse contient le flux de sortie pour la


gnration de la page HTML rsultat (getWriter() )

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 36

18

Structure de base dune servlet


import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SomeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Use "request" to read incoming HTTP headers (e.g. cookies) // and HTML form data (e.g. data the user entered and submitted) ... // Use "response" to specify the HTTP response line and headers // (e.g. specifying the content type, setting cookies). PrintWriter out = response.getWriter(); // Use "out" to send content to browser }

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 37

Un exemple

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 38

19

Un exemple
package hall; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("Hello World"); } }
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 39

Compiler et installer cet exemple


" "

Linstallation varie dun serveur l'autre Pour compiler :


"

Positionner le classpath, puis depuis le rpertoire hall/ :

javac -classpath .:<tomcat_dir>/lib/servlet.jar HelloWorld.java

"

Deux manires de tester :


"

Avec JSWDK, mettre hall.HelloWorld dans le rpertoire d'exemple Avec Apache Tomcat : crer une application web

"

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 40

20

Une application Web


"

Une application web = un espace virtuel


n Contient html, images, servlets, jsp...

"

Avec Tomcat
Editer <tomcat_dir>/server.xml pour dfinir une application Web <Context path="pit" docBase="pit" defaultSessionTimeOut="30" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false" />
" " "

Dans cet exemple, l'application web se nomme pit Mettre les classes dans <tomcat_dir>/pit/WEB-INF/classes Editer <tomcat_dir>/pit/WEB-INF/web.xml

Patrick Itey - INRIA Servlets & JSP - page 41

16/09/2000

Une application Web (suite)


"

Avec le fichier <tomcat_dir>/pit/WEB-INF/web.xml

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd"> <web-app> <servlet> <servlet-name> HelloWorld </servlet-name> <servlet-class> hall.HelloWorld </servlet-class> </servlet> </web-app>

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 42

21

Une application Web (suite)


"

Une fois une application web cre, on peut mettre autant de servlets que l'on veut... Relancer Tomcat chaque modif des fichiers XML server.xml et/ou web.xml Pour invoquer la servlet, utiliser l'alias :
http://host/pit/servlet/HelloWorld

"

"

ou le nom complet...
http://host/pit/servlet/hall.HelloWorld

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 43

Charger et invoquer une servlet

D'une manire gnrale, une URL du type :

http://host:port/<web-app>/servlet/<servlet_class>?param1=value1&

Machine ou se trouve le serveur de servlets

Mot rserv Web appli. Nom complet de la classe (package)

Liste des paramtres et de leurs valeurs

Numro de port sur lequel il est lcoute

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 44

22

5pFXSpUDWLRQ GHV SDUDPqWUHV SDVVpV j OD VHUYOHW

Utilisation des mthodes de ServletRequest :


HttpServletRequest req, HttpServletResponse rep) throws ServletException, IOException String[] values = req.getParameterValues(); Enumeration list = req.getParameterNames(); String value1 = req.getParameter("param1"); if(value1 == null) ...

public void doGet(

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 45

Un autre exemple

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 46

23

Un autre exemple
package hall; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWWW extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n" + "<HTML>\n" + "<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" + "<H1>Hello WWW</H1>\n" +"</BODY></HTML>"); } }
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 47

Quelques trucs
" "

Bon, gnrer du HTML... la vraie solution c'est JSP ! Nanmoins : <DOCTYPE...> et <HEAD...> toujours pareils ! Faire une classe utilitaire !
public class ServletUtilities { public static final String DOCTYPE = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"; public static String headWithTitle(String title) { return(DOCTYPE + "\n" + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n"); } }

"

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 48

24

Nouvelle version
package hall; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWWW2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(ServletUtilities.headWithTitle("Hello WWW") + "<BODY>\n" + "<H1>Hello WWW</H1>\n" + "</BODY></HTML>"); }
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 49

Gestion des formulaires HTML

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 50

25

Introduction
"

Gestion des formulaires HTML

http://host/path?user=Marty+Hall&origin=bwi&dest=lax

"

La partie complique = paramtres du formulaire Visibles ou non dans l'URL (GET/POST) Ces paramtres doivent tre dcods !
"

"

"

Partie la plus difficile. Encodage = norme CGI

"

Avec les servlets : un vrai plaisir !


16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 51

Rcuprer les paramtres


"

Mthode getParameter() de HttpServletRequest


n Fonctionne avec GET ou POST

public class ShowParameters extends HttpServlet { public void doGet(HttpServletRequest request,...) { out.println(request.getParameter(param1) ); Enumeration paramNames=request.getParameterNames(); String[] paramValues = request.getParameterValues(paramNames); }

}
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 52

26

*HVWLRQ GHV FRRNLHV

&HVW TXRL "

Morceaux dinformations envoys par le serveur et renvoys par le client quand il revient visiter le mme URL Dure de vie rglable Permet la persistance

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 54

27

$ TXRL oD VHUW "


Identification des utilisateurs (e-commerce) Eviter la saisie dinformations rptition n login, password, adresse, tlphone Grer des prfrences utilisateur n sites portails ...

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 55

&RRNLH HW VpFXULWp "


Jamais interprt ou excut : pas de virus Un cookie est limit 4KB et les navigateurs se limitent 300 cookies (20 par site) : pas de surcharge de disque Bien pour rendre prives des donnes non sensibles n nom, adresse, mais pas No CB ! mais ne constitue pas un traitement srieux de la scurit
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 56

28

*HVWLRQ GHV FRRNLHV "

Utiliser les fonctions de l API des servlets n crer un cookie : classe Cookie, n crire/lire un cookie : addCookie(cookie), getCookies(), n positionner des attributs dun cookie : cookie.setXxx() Exemple denvoi dun cookie :
...

String nom = request.getParameter("nom"); Cookie unCookie = new Cookie("nom", nom); ...ici positionner des attributs si on le dsire response.addCookie(unCookie);
...
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 57

&UpDWLRQ G
XQ FRRNLH

Cookie unCookie = new Cookie(name, value);

n 2 arguments de type java.lang.String :

name et value

n caractres non autoriss :


espace

blanc [ ] ( ) = , " / ? @ : ;

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 58

29

$WWULEXWV GHV FRRNLHV


getValue/setValue getName/setName getComment/setComment getMaxAge/setMaxAge : dlai restant avant

expiration du cookie (en seconde) n par dfaut : pour la session courante getPath/setPath : rpertoire o s'applique le cookie n dir. courant ou pages spcifiques
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 59

5pFXSpUDWLRQ GHV FRRNLHV

Exemple de rcupration des cookies


Cookie [] cookies = request.getCookies(); String nom = getCookieValue(cookies, "nom", "non trouv"); ... public static String getCookieValue(Cookie [] cookies, String cookieName, String defaultValue) { for(int i=0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if(cookieName.equals(cookie.getName()) return(cookie.getValue()); } return(defaultValue); }
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 60

30

7HPSV G
H[SLUDWLRQ

Par dfaut, dure de vie d'un cookie = la connexion. Si on veut que le cookie soit sauv sur disque, modifier sa dure de vie :

public static final int SECONDS_PER_YEAR = 60*60*24*365; cookie.setMaxAge(SECONDS_PER_YEAR);

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 61

6XLYL GH VHVVLRQ HQ MDYD

31

3UREOpPDWLTXH

Protocole HTTP = protocole Internet dconnect n diffrent de Telnet, Ftp, n traite les requtes et les rponses comme transactions
simples et isoles (requtes non apparentes)

Certaines applications Web (e-commerce : caddie) ont besoin de maintenir une "mmoire" entre deux requtes n ie. maintenir une connexion de lutilisateur sur le serveur n pour se faire : concept de "suivi de sessions"
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 63

6XLYL GH VHVVLRQ  TX
HVWFH TXH F
HVW "

Mmoire de ce que fait l'utilisateur d'une page l'autre n consiste au transfert de donnes gnres par une
requte vers les requtes suivantes

4 mthodes avec les servlets Java n 1) utilisation des cookies (dj vu) n 2) rcriture d'URL : passage de paramtres n 3) utilisation des champs de formulaire "hidden" n 4) utilisation du JSDK (HttpSession API)
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 64

32

5ppFULWXUH G
85/

Principe : n ajouter dans la chane de requte de la servlet des


informations supplmentaires identifiant la session

<a href="http://leo.inria.fr/servlet/foo?uid=itey">Acheter</a>

n l'ID utilisateur est transmis en mme temps que la


requte; il est accd par chaque servlet mentionne qui rcupre les informations persistantes (BD, fichiers) partir de cet ID

Limitations : n donnes volumineuses, caractres autoriss, longueur


URL, donnes visibles (scurit)
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 65

&KDPSV GH IRUPXODLUHV FDFKpV

Principe : n on cache les donnes de session dans des champs


"hidden" :
<INPUT TYPE="HIDDEN" NAME="uid" VALUE=itey">

Limitations : n idem la "rcriture d'URL" sauf pour la scurit


(utilisation de POST)

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 66

33

6HUYOHW VHVVLRQ "

Trs simple avec l'API des servlets (JSDK) n objet HttpSession Principe : n Un objet "session" peut tre associ avec chaque
requte n Il va servir de "container" pour des informations persistantes n Dure de vie limite et rglable

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 67

0RGqOH EDVLTXH
HttpSession session = request.getSession(true); Caddy caddy = (Caddy) session.getValue("caddy"); if(caddy != null) { // le caddy nest pas vide ! afficheLeContenuDuCaddy(caddy); } else { caddy = new Caddy(); ... caddy.ajouterUnAchat(request.getParameter("NoArticle")); session.putValue("caddy", caddy); }....

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 68

34

0pWKRGHV GH OD FODVVH +WWS6HVVLRQ


getID() isNew() getCreationTime() / getLastAccessedTime() getMaxInactiveInterval() getValue(), removeValue(), putValue() invalidate()

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 69

-DYD 6HUYHU SDJHV -63

35

&
HVW TXRL "

Du java dans une page WWW !


http://fkeiko.inria.fr:8080/jsp/Test.jsp?titre=Les+JSP ... <I> <%= request.getParameter("titre"); %> </I> ...

n Entre les balises JSP <% %>

On peut mettre des pages .jsp partout o on met des pages HTML Elles sont converties "au vol" en servlet par le moteur de JSP
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 71

8Q H[HPSOH VLPSOH
<html><head><title>Un exemple de page JSP</title></head><body> <!-- dfinit les informations globales a la page --> <%@page language="java" %> <!-- Dclare la variable c --> <%! char c = 0; %> <!-- Scriplet (code java) %> <% for(int i = 0; i < 26; i++){ for(int j = 0; j < 26; j++){ c = (char)(0x41 + (26 - i + j)%26); %> <%= c %> <% } %> <br> <% } %> </body></html>
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 72

36

%DOLVHV -63 GDQV OH +70/

Trois types : n 1 - Scripting elements : du code java n 2 - directives : pour le contrle de la structure n 3 - actions : importation de composants existants

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 73

6FULSWLQJ HOHPHQWV 

<%= expression %>


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

n permet dintgrer des valeurs dans le code HTML n ces valeurs sont values, converties en chanes de
caractres et affiches

n les objets implicites (request, response, session, out,


...) disponibles

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 74

37

6FULSWLQJ HOHPHQWV 

<% code Java %> (scriplets)


<% String nom = request.getParameter("nom"); ... out.println("Nom de lutilisateur " + nom); %>

n cest un bloc de code Java n plac dans _jspService() de la servlet gnre n ayant accs :
aux aux

variables et beans dclars ( <%! %> ) objets implicites (voir plus loin)

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 75

6FULSWLQJ HOHPHQWV 

<%! dclarations %>


<%! private int accessCount = 0; private int incrementCount() {accessCount++;} %> ... <H2>Nombre et liste des articles</H2> Nombre darticles : <%= incrementCount() %>

n dfinitions des mthodes et variables de classe


utiliser dans toute la page n dfinit les mthodes jspInit() et jspDestroy()
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 76

38

'LUHFWLYHV

<%@ directive attribut1="valeur" attribut2="valeur"... %> 2 directives possibles (jsp1.0) : n page : informations relatives la page n include : fichiers inclure littralement

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 77

/D GLUHFWLYH  SDJH

Valeurs possibles : n <%@ page language="java" n <%@ page import="java.util.*, java.net.*" %> n <%@ page contentType="text/plain" %> n <%@ page session="true|false " %> n <%@ page errorPage="pathToErrorPage" %> n <%@ page isErrorPage="true|false" %> n <%@ page

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 78

39

/D GLUHFWLYH  LQFOXGH

Valeurs possibles : n <%@ include file="chemin relatif du fichier" %> n pour se rfrer au home dir du serveur Web : <%@
include file="/toto.html" %>

Interprt littralement, le fichier peut tre : n HTML, scripting elements, directives, actions, ... L'insertion se fait au moment de la traduction de la page...
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 79

9DULDEOHV SUpGpILQLHV

Ou "objets implicites", ils sont accessibles dans les scripting elements : n request : le HttpServletRequest n response : le HttpServletResponse n session : le HttpSession n out : flot de sortie (idem response.getWriter()) n application : le ServletContext (idem
getServletConfig().getContext() )

n config, pageContext, page... : peu utiles

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 80

40

$FWLRQV 

Syntaxe XML Permettent de faire des actions au moment o la page est demande par un client : n inclure dynamiquement un fichier n utiliser des beans n rediriger vers une autre page n etc...

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 81

$FWLRQV 

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

n inclusion au moment o la page est servie, pas au moment o elle est


traduite en servlet.

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

n permet d'instancier un bean depuis une page JSP. n ncessite de connatre le mcanisme des beans... n associ <jsp:getProperty.../> et <jsp:setProperty.../>

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

n redirige vers un autre URI/URL

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 82

41

8VHEHDQ HW JHW3URSHUW\

Mcanisme trs puissant !


<jsp:usebean

(rfrence l'instance du composant) class="paquetage.class" (nom qualifi de la classe) scope="page|request|session|application" (porte)


id="name"

/>

Pour lire une proprit du bean :


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

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 83

8VHEHDQ HW VHW3URSHUW\

Pour modifier une proprit du bean :


<jsp:setProperty name="name" property="property" value="value" /> <jsp:setProperty name="name" property="*" />

n Initialise tous les attributs de l objet name avec les


paramtres HTTP du mme nom n En 2 lignes !

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 84

42

([HPSOH G
XWLOLVDWLRQ G
XQ EHDQ

La page JSP :

<html> ... <jsp:usebean id="test" class="inria.SimpleBean" /> <jsp:setProperty name="test" property="message" value="Hello !!" /> <h1>Le message est : <i> <jsp:getProperty name="test" property="message" /> </i></h1> </html>

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 85

([HPSOH G
XWLOLVDWLRQ G
XQ EHDQ

Le code source Java du bean :

SimpleBean.java package inria; public class SimpleBean { private String message = "no message"; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 86

43

6HUYOHWV HW EDVHV GH GRQQpHV

6HUYOHWV HW EDVHV GH GRQQpHV


Web Client
Internet / Intranet HTML page

Java servlets

Database Server SGBD

Web Server

JDBC DriverManager

SGBD
Intranet
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 88

44

8Q H[HPSOH FRPSOHW  SXEOLHU VXU OH :HE XQ DQQXDLUH GXQH VRFLpWp

Lobjectif : n publier sur le Web en utilisant une servlet les


coordonnes dun employ en le recherchant par son nom

Lapproche en 3 parties : n la page HTML pour le formulaire d interrogation n la servlet effectuant la requte n la page HTML rsultat gnre par la servlet

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 89

/H IRUPXODLUH G LQWHUURJDWLRQ
Fichier : annuaire.html
<HTML> <HEAD><TITLE>Annuaire YETI</TITLE></HEAD> <BODY> <CENTER><H1> Annuaire de la socit YETI </H1></CENTER> <HR WIDTH="75%"> <CENTER><H2>Recherche de coordonnes</H2></CENTER> <P>Tapez les premires lettres de la personne dsire <P><FORM METHOD=POST ACTION=http://fkeiko.inria.fr:8090/servlet/Annuaire> <INPUT TYPE=TEXT NAME="nom" SIZE=10 MAXLENGTH=20 VALUE=""> <P><INPUT TYPE=SUBMIT NAME="go" VALUE="Rechercher"> <INPUT TYPE=RESET NAME="reset" VALUE="Reset"> </BODY> </HTML> Servlets & JSP - page 90 16/09/2000 Patrick Itey - INRIA

45

/D VHUYOHW $QQXDLUH 
import import import import javax.servlet.*; javax.servlet.http.*; java.io.*; java.sql.*;

public class Annuaire extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { ... } public String getServletInfo() { return "La servlet Annuaire"; } }
16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 91

/D VHUYOHW $QQXDLUH 
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("<HTML><BODY>"); out.Println("<CENTER><H1>Voici les coordonnes :</H1></CENTER>"); try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:ANNUAIRE"; Connection c = DriverManager.getConnection(url, "itey", "admin"); Statement s = c.createStatement(); String query = "SELECT name,phone FROM Annuaire" + "WHERE name LIKE " + req.getParameter("nom") + ResultSet rs = s.executeQuery(query); rs.next(); out.println("<P>NOM: " + rs.getString("name")); out.println("<P>TELEPHONE: " + rs.getInt("phone")); rs.close(); s.close(); c.close(); } catch(Exception e) {} out.println("</BODY>/HTML>"); out.close(); }

"%'";

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 92

46

4XHOTXHV OLHQV 

Tous les liens sur :

http://www-sop.inria.fr/acacia/personnel/itey/Francais/Cours/internet-fra.html#liens

16/09/2000

Patrick Itey - INRIA

Servlets & JSP - page 93

47

Vous aimerez peut-être aussi