Você está na página 1de 78

Introduction aux servlets et JSP

M. Belguidoum
Universit Mentouri de Constantine Dpartement Informatique

M. Belguidoum (UMC)

Servlets et JSP

1 / 78

Plan

1 2 3 4 5

Introduction Servlet et JSP Quelques fonctionnalits JavaBeans Conclusion

M. Belguidoum (UMC)

Servlets et JSP

2 / 78

Introduction

1 2 3 4 5

Introduction Servlet et JSP Quelques fonctionnalits JavaBeans Conclusion

M. Belguidoum (UMC)

Servlets et JSP

3 / 78

Introduction

Application web

Une application web est une extension dynamique d'un serveur web ou applicatif. Il y a deux types d'applications web :
les applications web orientes prsentation qui gnrent des pages web (HTML, XML) dynamiquement les applications web orientes service : ce sont les web services http: //java.sun.com/javaee/5/docs/tutorial/doc/bnadr.html

Les servlets sont une des techniques utilises pour construire des applications web.

M. Belguidoum (UMC)

Servlets et JSP

4 / 78

Introduction

Motivation et historique
Ncessit d'avoir des pages HTML dynamiques i.e. pages cres lors de la requte (mto, cours de la bourse, vente aux enchres, etc.) Technologie des scripts CGI (Common Gateway Interface) : le serveur Web demande lancer un programme par le protocole CGI

principe : au lieu d'envoyer le contenu d'un chier (page HTML, image...), un serveur HTTP utilisant une interface CGI excute un programme puis retourne le contenu gnr, comme s'il s'agissait d'un contenu de chier. CGI est le standard industriel qui indique comment transmettre la requte du serveur HTTP au programme et comment rcuprer la rponse gnre. CGI permet de passer des paramtres au programme, de telle manire qu'il puisse en tenir compte pour gnrer les donnes. Exemple : une chane de caractres recherch auprs d'un moteur de recherche.

Inconvnient : une nouvelle copie du programme doit tre lance chaque requte, surcharge rapideles serveurs
M. Belguidoum (UMC) Servlets et JSP 5 / 78

Introduction

Servlet et JSP

Les servlets constituent la rponse Java aux programmes CGI. Excutes sur un serveur d'applications elles interceptent les requtes des navigateurs web et gnrent des rponses (souvent en DHTML) construites dynamiquement l'aide du langage Java. Les JSP sont l'extension des servlets et se rapprochent du modle J2EE qui spare :
Les contenus statiques et dynamiques La prsentation et la logique mtier, notamment grce aux JavaBeans.

M. Belguidoum (UMC)

Servlets et JSP

6 / 78

Servlet et JSP

1 2 3 4 5

Introduction Servlet et JSP Quelques fonctionnalits JavaBeans Conclusion

M. Belguidoum (UMC)

Servlets et JSP

7 / 78

Servlet et JSP

JSP et Servlet
servlet

du code Java produisant une page HTML programme autonome stock dans un chier .class sur le serveur exemple : out.println("<H1>titre niveau 1</H1>");
JSP

page HTML contenant du code Java qui sera excut pour produire la page programme source Java embarqu dans une page .html
.class autonome embarqu dans .html
ct client

applet JavaScript

ct serveur

servlet JSP

M. Belguidoum (UMC)

Servlets et JSP

8 / 78

Servlet et JSP

Conteneur

Un conteneur est un composant logiciel systme qui contrle d'autres composants, dits mtier

Tomcat est un exemple de conteneur Les servlets n'ont pas de mthode main(), ils sont contrls par le conteneur Tomcat Les requtes ne sont pas adresses aux servlets mais au conteneur dans lequel ils sont dploys Tous les conteneurs de servlets doivent supporter le protocole HTTP et peuvent aussi supporter le protocole HTTPS. Un conteneur de JSP (JSP container) fournit les mmes services qu'un conteneur de servlets.

M. Belguidoum (UMC)

Servlets et JSP

9 / 78

Servlet et JSP

Pourquoi un conteneur ?

Un conteneur fournit pour les Servlets

Un support pour la communication : pas besoin de ServerSocket, Socket, Stream, ... La gestion du cycle de vie Un support pour le Multithreading : cration automatique des Threads Un support pour la scurit Un support pour les JSP

M. Belguidoum (UMC)

Servlets et JSP

10 / 78

Servlet et JSP

Apache Tomcat
Tomcat est un conteneur libre de servlets Java 2 Enterprise Edition, issu du projet Jakarta. Implmente les spcications des servlets et des JSP du Java Community Process. Il est paramtrable par des chiers XML et de proprits, et inclut des outils pour la conguration et la gestion. Il comporte galement un serveur HTTP. Tomcat est un serveur Web qui gre les servlets et les JSP. le compilateur Jasper compile les pages JSP pour en faire des servlets. Le moteur de servlet Tomcat est souvent employ en combinaison avec un serveur Web Apache ou d'autres serveurs Web. Tomcat a t crit en langage Java, il s'excuter via la machine virtuelle Java sur n'importe quel systme d'exploitation la supportant.
M. Belguidoum (UMC) Servlets et JSP 11 / 78

Servlet et JSP

Organisation des repertoires de Tomcat

M. Belguidoum (UMC)

Servlets et JSP

12 / 78

Servlet et JSP

Application web avec un conteneur

M. Belguidoum (UMC)

Servlets et JSP

13 / 78

Servlet et JSP

Principe de fonctionnement JSP-Servlet

M. Belguidoum (UMC)

Servlets et JSP

14 / 78

Servlet et JSP

Algorithme d'excution de la JSP

M. Belguidoum (UMC)

Servlets et JSP

15 / 78

Servlet et JSP

Quel code dans une JSP ?


: entre <% et %> code Java insr dans _jspservice() de la servlet : utilisation de out, request, response.
scriptlet

<\%

\% >

String [] langages = {" Java " , "C ++ " , " Smalltalk " , " Simula 67 " } out . println ( " <h3 > Principaux langages orients objets : </h3 >" for ( int i =0; i < langages . length ; i ++) { out . println ( " <p >" + langages [i] + " </p >" ); }

expressions

: entre <%= et %> : retourne une String qui est passe out.println dans _jspService : <%= SALUT %> quivalent <% out.println(SALUT) ; %>

: entre <% ! et %> : dclaration de variables et de mthodes d'instances.


dclarations
M. Belguidoum (UMC) Servlets et JSP 16 / 78

Servlet et JSP

Une page jsp est traite par le serveur (tomcat par exemple) cre le code d'une classe java associe. Par exemple, pour une page jsp nomme helloworld.jsp, tomcat cre uneclasse helloworld$jsp.java. chaque page jsp correspond donc une classe java. Le code html et une partie du code jsp sont utiliss par le serveur pour produire la mthode _jspService appele l'excution de jsp pour crer la page rsultat.

M. Belguidoum (UMC)

Servlets et JSP

17 / 78

Servlet et JSP

Gnration de servlet partir de JSP

M. Belguidoum (UMC)

Servlets et JSP

18 / 78

Servlet et JSP

Servlets
L'API pour les servlets constitue de deux packages :
javax.servlet javax.servlet.http

JSDK (Java Servlet Development Kit) tlchargeable


http://java.sun.com/products/servlet

M. Belguidoum (UMC)

Servlets et JSP

19 / 78

Servlet et JSP

Variable JSP prdnies


Nom de la variable
exception

Classe

Description
l'application Web de la page JSP informations d'initialisation de la servlet JSP accessible seulement depuis les pages d'erreur le ot de sortie l'instance de la servlet JSP les composants web en rapport avec une requte la requte courante la rponse la session courante

application javax.servlet.ServletContext config javax.servlet.ServletConfig java.lang.Throwable

out javax.servlet.jsp.JspWriter page java.lang.Object pageContext javax.servlet.jsp.PageContext request response session javax.servlet.ServletRequest javax.servlet.ServletResponse javax.servlet.http.HttpSession

M. Belguidoum (UMC)

Servlets et JSP

20 / 78

Servlet et JSP

Utilisation d'une servlet


Une servlet doit implmenter l'interface javax.servlet.Servlet
soit directement, soit en drivant d'une classe qui implmente dj cette interface (comme GenericServlet ou HttpServlet) L'interface javax.servlet.Servlet possde les mthodes pour : initialiser la servlet : init() recevoir et rpondre aux requtes des clients : service()
Contient deux paramtres :

protected void service ( HttpServletRequest req , HttpServletResponse resp ) throws ServletException , java . io . IOException
Cette mthode crite dans type http. Mthode HTTP GET =>

HttpServlet

redirige la requte suivant son

Mthode HTTP POST =>

dtruire la servlet et ses ressources : destroy()


M. Belguidoum (UMC) Servlets et JSP 21 / 78

doGet(...) doPost(...)

Servlet et JSP

doGet(...), doPost(...)

Ont les mmes paramtres que service(...) de HttpServlet :


public void doXXX ( HttpServletRequest request , HttpServletResponse response ) throws ServletException , java . io . IOException

En gnral on spcialise l'une des deux mthodes et la seconde appelle la premire.

M. Belguidoum (UMC)

Servlets et JSP

22 / 78

Servlet et JSP

ServletsHTTP

M. Belguidoum (UMC)

Servlets et JSP

23 / 78

Servlet et JSP

Requtes et rponses HTTP

M. Belguidoum (UMC)

Servlets et JSP

24 / 78

Servlet et JSP

Rcuprer des paramtres de la requte


La requte envoie ses donnes par http
Souvent des champs d'un formulaire On rcupre ces donnes travers l'objet request en utilisant la mthode String getParameter(String nomComposantFormulaire) qui cherche la valeur d'un paramtre d'un formulaire Exemple : <% String MotDePasse= la mthode : getParameterValues() est utilise pour rcuprer un paramtre avec une valeur multiple, elle renvoie un tableau de chane de caractres. Exemple : String[] sportsFavoris =
request.getParameterValues("sport"); request.getParameter("MotDePasse">)

Les paramtres peuvent tre indiqus directement dans l'URL de la requte (rcriture d'URL) :
http://serveur/servlet?param1=valeur1&param2=valeur2
M. Belguidoum (UMC) Servlets et JSP 25 / 78

Servlet et JSP

Envoyer une rponse


On positionne le type MIME par : void setContentType(String On rcupre le canal de sortie texte par : PrintWriter getWriter()
// le rsultat est en HTML response . setContentType ( " text / html " ); // rcupre un flux pour gnrer le rsultat PrintWriter out = response . getWriter ();

type)

quelques types MIME courants


text/html image/gif video/mpeg audio/mp3 application/pdf

M. Belguidoum (UMC)

Servlets et JSP

26 / 78

Servlet et JSP

Correspondance JSP/Servlet
JSP d'origine
<h1 >Un nombre alatoire </ h1 > <%= Math . random () %>

Code du servlet rsultant de la traduction


public void _jspService ( HttpServletRequest request , HttpServletResponse response ) throws ServletException , IOException { response . setContentType (" text / html " ); HttpSession session = request . getSession (); JspWriter out = response . getWriter (); out . println ( " <h1 > Un nombre alatoire </ h1 >" ); out . println ( Math . random ()); ... }

M. Belguidoum (UMC)

Servlets et JSP

27 / 78

Servlet et JSP

Cycle de vie d'une servlet

M. Belguidoum (UMC)

Servlets et JSP

28 / 78

Servlet et JSP

Exemple servlet
import java . io .*; import javax . servlet .*; import javax . servlet . http .*; public class HelloServlet extends HttpServlet { public void doGet ( HttpServletRequest request , HttpServletResponse response ) throws ServletException , IOException { // 1. Spcifier le type MIME du contenu de la rponse response . setContentType (" text / html " ); // 2. Rcupre le PrintWriter pour envoyer des donnes au client PrintWriter out = response . getWriter (); // 3. Envoyer l ' information au client out . println ( " <html >" ); out . println ( " <head >< title > Bonjour </ title > </ head >" ); out . println ( " <body >" ); out . println ( " <h1 > Bonjour tous </h1 >" ); out . println ( " </ body > </ html >" ); } public void doPost ( HttpServletRequest request , HttpServletResponse response ) throws ServletException , IOException { doGet ( request , response );} }
M. Belguidoum (UMC) Servlets et JSP

29 / 78

Servlet et JSP

Notion de module Web (.war)


Un servlet ne peut pas tre dploy directement dans un conteneur, il doit faire partie d'un module Web Un module Web est un ensemble de librairies, de chiers de congurations, de code Java (bytecode des servlets), JavaServer Pages, servlets, classes Java, chiers XML, et des pages web statiques (HTML, Javascript, ...) le tout constituant une application web. Le module Web (chier WAR, pour Web Application ARchive, est utilis pour dployer une application web sur un serveur d'application (Tomcat ou GlassFish)
WEB-INF/
lib/ Classes/ web.xml

M. Belguidoum (UMC)

Servlets et JSP

30 / 78

Servlet et JSP

Notion de module Web (.war)

M. Belguidoum (UMC)

Servlets et JSP

31 / 78

Servlet et JSP

Notion de module Web (.war)


web.xml

Est un chier XML dnissant la structure et le paramtrage de l'application web qui a une syntaxe prcise Par exemple : il contient le nom de la Classe (implmentant l'interface Servlet) utiliser pour tel ou tel chemin d'une URL Web Si l'application est fonde uniquement sur des chiers JSP, alors web.xml peut tre omis. Si l'application est fonde sur des servlets, alors web.xml indique quelles sont les URL associes chaque servlet. Lib/ : contient tous les .jar dont notre programme a besoin Classes/ : contient toutes les .class que lon produit

Le serveur d'applications va savoir, pour chaque application qu'il hberge, lire le web.xml et crer automatiquement un classpath spcique l'application partir des rpertoires lib et classes
M. Belguidoum (UMC) Servlets et JSP 32 / 78

Servlet et JSP

Notion de module Web (.war)


Problmatique : comment diuser une application base de servlets ? souvent plusieurs servlet (chiers .class) des ressources additionnelles (.gif, .jpeg, .html, .xml, ...) Solution chier .war qui reprsente une archive pour les applications web diusion d'un seul chier prt l'emploi chiers .war se manipulent (cration, extraction, ...) avec la commande jar
cration : jar cvf app.war app ache le contenu : jar tf app.war extraction : jar xvf app.war

M. Belguidoum (UMC)

Servlets et JSP

33 / 78

Servlet et JSP

Descripteur de dploiement web.xml


Chaque archive .war doit tre accompagne d'un chier web.xml dcrivant les servlets inclues dans l'archive 2 balises principales : <servlet> et <servlet-mapping>
<web - app > < servlet > < servlet - name > HelloServlet </ servlet - name > < servlet - class > mypackage . MaPremiereServlet </ servlet - class > </ servlet > < servlet - mapping > < servlet - name > HelloServlet </ servlet - name > <url - pattern >/ version / beta / Hello </ url - pattern > </ servlet - mapping > </ web - app >

M. Belguidoum (UMC)

Servlets et JSP

34 / 78

Servlet et JSP

Descripteur de dploiement web.xml

une balise <servlet> par servlet

un nom et une classe par servlet le chier .class de la servlet doit tre stocks dans WEB-INF/classes ventuellement sous-rpertoires correspondant aux packages :
WEB-INF/classes/mypackage/HelloServlet.class

une balise <servlet-mapping> par servlet

un nom (doit correspondre une balise <servlet> existante) une URL relative permettant d'accder la servlet

plusieurs autres balises peuvent tre utilises voir

http://java.sun.com/j2ee/dtds/web-app_2_2.dtd

M. Belguidoum (UMC)

Servlets et JSP

35 / 78

Servlet et JSP

Installation d'une archive .war dans Tomcat


dans le rpertoire <tomcat_root>/webapps
webapps |-> myapp.war |-> myapp |-> index.html |-> WEB-INF |-> web.xml |-> classes |-> mypackage |-> HelloServlet.class

URL pour accder la servlet :

http://machine.com:8080/myapp/version/beta/Hello dpend <url-pattern> fournit dans web.xml


M. Belguidoum (UMC) Servlets et JSP 36 / 78

Servlet et JSP

Descripteur de dploiement web.xml


Paramtres d'initialisation possibilit d'inclure des paramtres d'initialisation de la servlet dans web.xml
avantage : peuvent tre changs sans avoir recompiler
< servlet > < servlet - name > HelloServlet </ servlet - name > < servlet - class > mypackage . HelloServlet </ servlet - class > <init - param > < param - name > nom </ param - name > < param - value > valeur </ param - value > </ init - param > </ servlet >

Dans le code de la servlet (par ex. mthode init) String valeur = getInitParameter("nom");
M. Belguidoum (UMC) Servlets et JSP 37 / 78

Quelques fonctionnalits

1 2 3 4 5

Introduction Servlet et JSP Quelques fonctionnalits JavaBeans Conclusion

M. Belguidoum (UMC)

Servlets et JSP

38 / 78

Quelques fonctionnalits

Session

Session
le web n'ore par dfaut aucun suivi de session. Cette fonctionnalit est supporte par les servlets l'aide de l'objet HttpSession obtenu l'aide de request.getSession() Objectif : tre capable de "suivre" l'activit du client sur plusieurs pages HttpSession session = request.getSession(true) : retourne la session courante pour cet utilisateur ou une nouvelle session HttpSession session = request.getSession(false) : retourne la session courante pour cet utilisateur ou null Les mthodes public void putValue(String name, Object value) et public Object getValue(String name) permettent respectivement d'attribuer (i.e. modier) et consulter une valeur de session identie par son nom.
M. Belguidoum (UMC) Servlets et JSP 39 / 78

Quelques fonctionnalits

Session

Session
Mthodes d'un objet de type HttpSession
void setAttribute(String name, Object value) : ajoute un couple (name, value) pour cette session Object getAttribute(String name) : retourne l'objet associ la cl name ou null void removeAttribute(String name) : enlve le couple de cl name java.util.Enumeration getAttributeNames() : retourne tous les

noms d'attributs associs la session maximum d'une session

void setMaxIntervalTime(int seconds) : spcie la dure de vie long getCreationTime() / long getLastAccessedTime() :

retourne la date de cration / de dernier accs de la session en ms depuis le 1/1/1970, 00h00 GMT new Date(long)
Servlets et JSP 40 / 78

M. Belguidoum (UMC)

Quelques fonctionnalits

Session

Session : exemple
Suivi de session pour un compteur
public class HttpSessionServlet extends HttpServlet { protected void doGet ( HttpServletRequest req , HttpServletResponse res ) throws ServletException , IOException { res . setContentType (" text / plain " ); PrintWriter out = res . getWriter (); HttpSession session = req . getSession (); Integer count = ( Integer ) session . getAttribute (" count " ); if ( count == null ) count = new Integer (1); else count = new Integer ( count . intValue () + 1); session . setAttribute (" count " , count ); out . println (" Vous avez visit cette page " + count + " fois ." ); } }

M. Belguidoum (UMC)

Servlets et JSP

41 / 78

Quelques fonctionnalits

Cookies

Les cookies
Permettent un serveur Web de stocker de l'information chez un client Un cookie est une information envoye au navigateur (client) par un serveur WEB qui peut ensuite tre relue par le client Lorsqu'un client reoit un cookie, il le sauve et le renvoie ensuite au serveur chaque fois qu'il accde une page sur ce serveur Le client a la possibilit d'interdire leur dpt dans son navigateur La valeur d'un cookie pouvant identier de faon unique un client, ils sont souvent utiliss pour le suivi de session Les cookies ont t introduits par la premire fois dans Netscape Navigator

M. Belguidoum (UMC)

Servlets et JSP

42 / 78

Quelques fonctionnalits

Cookies

Les cookies
L'API Servlet fournit la classe javax.servlet.http.Cookie pour travailler avec les Cookies :

Cookie(String name, String value) : construit un cookie String getName() : retourne le nom du cookie String getValue() : retourne la valeur du cookie setValue(String new_value) : donne une nouvelle valeur au cookie setMaxAge(int expiry) : spcie l'ge maximum du cookie

Pour la cration d'un nouveau cookie, il faut l'ajouter la rponse (HttpServletResponse) addCookie(Cookie mon_cook) : ajoute la rponse un cookie La Servlet rcupre les cookies du client en exploitant la rponse (HttpServletRequest) Cookie[] getCookies() : rcupre l'ensemble des cookies du site
M. Belguidoum (UMC) Servlets et JSP 43 / 78

Quelques fonctionnalits

Cookies

Les cookies : exemples


Code pour crer un cookie et l'ajouter au client
Cookie cookie = new Cookie (" Id " , " 123 " ); res . addCookie ( cookie );

Code pour rcuprer les cookies


Cookie [] cookies = req . getCookies (); if ( cookies != null ) { for ( int i = 0; i < cookies . length ; i ++) { String name = cookies [ i ]. getName (); String value = cookies [i ]. getValue (); } }

M. Belguidoum (UMC)

Servlets et JSP

44 / 78

Quelques fonctionnalits

Cookies

Les cookies

Le plus gros problme des cookies est que les navigateurs ne les acceptent pas toujours L'utilisateur peut congurer son navigateur pour qu'il refuse ou pas les cookies Les navigateurs n'acceptent que 20 cookies par site, 300 par utilisateur et la taille d'un cookie peut tre limite 4096 octets

M. Belguidoum (UMC)

Servlets et JSP

45 / 78

Quelques fonctionnalits

Upload

Upload

Par exemple dans le cas de rcupration de chiers uploads partir d'un fomulaire Dnition des formulaires avec upload
<HTML > < BODY > < FORM ACTION =" url servlet traitement du formulaire " METHOD = POST ENCTYPE = " multipart / form - data " > Slectionner un fichier < INPUT TYPE = FILE NAME =" fichier " > < INPUT TYPE = SUBMIT VALUE =" Envoi " > < INPUT TYPE = RESET VALUE =" Remise zro " > <P > </ FORM > </ BODY > </ HTML >

M. Belguidoum (UMC)

Servlets et JSP

46 / 78

Quelques fonctionnalits

Upload

Upload

M. Belguidoum (UMC)

Servlets et JSP

47 / 78

Quelques fonctionnalits

Upload

Upload
Rcupration des chiers uploads partir d'un formulaire rcupration du ux binaire, programmer le dcodage / librairie existante Commons FileUpload :

http://jakarta.apache.org/commons/fileupload/

le upload est trait dans la mthode service d'une servlet


import org . apache . commons . fileupload . FileItem ; import org . apache . commons . fileupload . FileUploadBase ; FileUploadBase fub = new FileUploadBase (); List files = fub . parseRequest ( request ); for ( Iterator i = files . iterator () ; i. hasNext () ; ) { FileItem fi = ( FileItem ) i. next (); File monFichier = new File (" ... " ); fi . write ( monFichier ); }

M. Belguidoum (UMC)

Servlets et JSP

48 / 78

Quelques fonctionnalits

Chanage et collaboration des servlets

Chanage et collaboration des servlets

Les Servlets s'excutant dans le mme serveur peuvent dialoguer entre elles Deux principaux styles de collaboration :
Partage d'information : un tat ou une ressource. Exemple : un magasin en ligne pourrait partager les informations sur le stock des produits ou une connexion une base de donnes Partage du contrle : une requte. Rception d'une requte par une Servlet et laisser l'autre Servlet une partie ou toute la responsabilit du traitement

M. Belguidoum (UMC)

Servlets et JSP

49 / 78

Quelques fonctionnalits

Chanage et collaboration des servlets

Partage d'information
La collaboration est obtenue par l'interface ServletContext L'utilisation de ServletContext permet aux applications web de disposer de son propre conteneur d'informations unique Une Servlet retrouve le ServletContext de son application web par un appel getServletContext() Exemples de mthodes
nom indiqu

void setAttribute(String name, Object o) : lie un objet sous le Object getAttribute(String name) : retrouve l'objet sous le nom

indiqu

Enumeration getAttributeNames() : retourne l'ensemble des noms

de tous les attributs lis nom indiqu


M. Belguidoum (UMC)

void removeAttribute(String name) : supprime l'objet li sous le

Servlets et JSP

50 / 78

Quelques fonctionnalits

Chanage et collaboration des servlets

Exemple : partage d'information


public class PizzasAdmin extends HttpServlet { protected void doGet ( HttpServletRequest req , HttpServletResponse res ) throws ServletException , IOException { res . setContentType (" text / plain " ); PrintWriter out = res . getWriter (); ServletContext context = this . getServletContext (); context . setAttribute (" Specialite " , "4 Fromage " ); context . setAttribute (" Date " , new Date ()); out . println (" La pizza du jour a t dfinie . " );}} public class PizzasClient extends HttpServlet { protected void doGet ( HttpServletRequest req , HttpServletResponse res ) throws ServletException , IOException { ... ServletContext context = this . getServletContext (); String pizza_spec = ( String ) context . getAttribute ( " Specialite " ); Date day = ( Date ) context . getAttribute ( " Date " ); DateFormat df = DateFormat . getDateInstance ( DateFormat . MEDIUM ); String today = df . format ( day ); out . println (" Aujourd ' hui (" + today + ") , notre specialite est : " + pizza_spec );}}
M. Belguidoum (UMC) Servlets et JSP 51 / 78

Quelques fonctionnalits

Chanage et collaboration des servlets

Partage du contrle

Les Servlets peuvent partager ou distribuer le contrle de la requte Deux types de distribution Les avantages sont :

Distribuer un renvoi : une Servlet peut renvoyer une requte entire Distribuer une inclusion : une Servlet peut inclure du contenu gnr aggrgation des rsultats fournis par plusieurs servlets : meilleure modularit et meilleure rutilisation La dlgation de comptences Une meilleure abstraction et une plus grande souplesse Architecture logicielle MVC (Servlet = contrle et JSP = prsentation)

M. Belguidoum (UMC)

Servlets et JSP

52 / 78

Quelques fonctionnalits

Chanage et collaboration des servlets

Partage de contrle
Utilisation d'un RequestDispatcher obtenu via un objet request path est un chemin relatif ou absolu ne pouvant pas sortir du contexte Inclusion du rsultat d'une autre servlet :
rd.include(request, response);
Dlgation

RequestDispatcher rd = request.getRequestDispatcher(String path);

rd.forward(request, response); sendRedirect() est utilise pour les redirections externes eectues par le client car aucune recherche getContext() n'est ncessaire

du traitement une autre servlet :

Pour distribuer en dehors du contexte courant il faut :

Identier le contexte extrieur (utilisation de getContext()) Utiliser la mthode getRequestDispatcher(String path) Le chemin est uniquement en absolu
Servlets et JSP 53 / 78

M. Belguidoum (UMC)

Quelques fonctionnalits

Concurrence

Gestion de la concurrence
Par dfaut les servlets sont excutes de faon multi-threade Si une servlet doit tre excute en exclusion mutuelle (ex. : accs des ressources partages critiques) implantation de l'interface marqueur SingleThreadModel
public class CompteurServlet extends HttpServlet implements SingleThreadModel { public void service ( ServletRequest request , ServletResponse response ) throws ServletException , IOException { /* * Du code en exclusion mutuelle avec lui - mme */ } }

Autre solution : dnir du code synchronized dans la servlet


M. Belguidoum (UMC) Servlets et JSP 54 / 78

Quelques fonctionnalits

scurit

Scurit : authentication

Conserver les informations sensibles dans les mains des utilisateurs Nous distinguons plusieurs types d'autorisation :
demande/rponse (codage Base64)

BASIC : fournit par le protocole HTTP bas sur un modle simple de FORM : authentication ne reposant pas celle du protocole HTTP

M. Belguidoum (UMC)

Servlets et JSP

55 / 78

Quelques fonctionnalits

scurit

Scurit : authentication
BASIC

FORM

M. Belguidoum (UMC)

Servlets et JSP

56 / 78

Quelques fonctionnalits

scurit

Scurit : identication par les Servlets

Gre par le conteneur de Servlets (Ident 1) :


web.xml

Spcication d'un domaine de scurit dans le chier de conguration Les utilisateurs sont grs (l'utilisateur existe-il, le mot de passe est-il correct, etc.) uniquement par le conteneur de Servlets Base sur les rles (BASIC) ou base de formulaire (FORM) Les utilisateurs sont stocks dans une base de donnes, un chier, etc. La vrication est eectue dans les Servlets (besoin d'un codage) Personnalise (BASIC) ou personnalise base de formulaire (FORM)

Eectue l'intrieur des Servlets (Ident 2) :

M. Belguidoum (UMC)

Servlets et JSP

57 / 78

Quelques fonctionnalits

scurit

Authentication base sur les rles : Ident 1


Exemple : Servlet qui aprs identication ache un ensemble d'informations

M. Belguidoum (UMC)

Servlets et JSP

58 / 78

Quelques fonctionnalits

scurit

Authentication base sur les rles : Ident 1


Besoin de modication du chier de conguration web.xml de l'application WEB considre

M. Belguidoum (UMC)

Servlets et JSP

59 / 78

Quelques fonctionnalits

scurit

Authentication personnalise base de formulaire : Ident 2


Exemple : Servlet qui traite les autorisations de type FORM

M. Belguidoum (UMC)

Servlets et JSP

60 / 78

Quelques fonctionnalits

Accs aux bases de donnes

Exemple : connexion une base de donnes


public class DataBaseServlet extends HttpServlet { protected void doGet ( HttpServletRequest req , HttpServletResponse res ) throws ServletException , IOException { res . setContentType (" text / html " ); PrintWriter out = res . getWriter (); try { Class . forName (" com . mysql . jdbc . Driver " ); Connection ma_connexion = DriverManager . getConnection ( " jdbc : mysql :// localhost :1527/ PersonDB " ); Statement mon_statement = ma_connexion . createStatement (); ResultSet mon_resultat = mon_statement . executeQuery ( " SELECT NAME , FIRSTNAME , OLDYEAR FROM PERSON " ); while ( mon_resultat . next ()) { out . print (" Nom : " + mon_resultat . getString (1)); out . print (" Prnom : " + mon_resultat . getString (2)); out . println (" Age : " + mon_resultat . getInt (3)); out . println (" <br > " ); } } catch ( SQLException e) { ... } }
M. Belguidoum (UMC) Servlets et JSP 61 / 78

JavaBeans

1 2 3 4 5

Introduction Servlet et JSP Quelques fonctionnalits JavaBeans Conclusion

M. Belguidoum (UMC)

Servlets et JSP

62 / 78

JavaBeans

JSP et Java beans : motivation

Les protocoles web classiques ne grent pas de session : pas de conservation sur le serveur des informations sur l'utilisateur, comme un mot de passe utilis pour interroger une base de donnes, etc. L'architecture JSP/Servlets propose une solution simple et lgante les javabeans. avoir le moins de code Java possible dans une page JSP (HTML) Sous-traiter le code un Java bean

M. Belguidoum (UMC)

Servlets et JSP

63 / 78

JavaBeans

JSP et Java beans : motivation

Un javabean est un objet java, identi par un nom (une chane de caractres), dont la dure de vie peut dpasser la simple requte http. Les beans sont utilisables partir des jsp : <jsp:useBean> Pour qu'un objet java puisse tre utilis comme bean sa classe doit :
implmenter java.io.Serializable ; disposer d'un constructeur par dfaut (i.e. sans argument) ; avoir des accesseurs nomms setXX et getXX, o XX est le nom d'un champ. la classe doit tre explicitement situe dans un package.

M. Belguidoum (UMC)

Servlets et JSP

64 / 78

JavaBeans

Exemple de bean : le bean Compteur


package test ; public class Compteur implements java . io . Serializable private int valeur ; public Compteur ( int v) { valeur = v; } public Compteur () { valeur = 0; } public void incremente () { valeur ++; } public int getValeur () { return this . valeur ; } public void setValeur ( int argValeur ) { this . valeur = argValeur ; } } {

M. Belguidoum (UMC)

Servlets et JSP

65 / 78

JavaBeans

Accs aux beans depuis les jsp


Les balises spciques au beans sont : <jsp:useBean ... /> : dclarer un bean avec un nom (id), une dure de vie (scope) et le nom de la classe utilise pour implmenter le bean (class) de la forme nompackage.NomClasse

la dure peut tre xe : page, request, session ou application. request : le bean est dtruit lorsque le client demande une nouvelle page. Le passage des paramtres de suivi de session doit ainsi tre ralis manuellement. page : rarement employe, cette porte est limite la page en cours (aucune information de session ne peut tre rcupre) : ce bean est accessible n'importe quel endroit de la page. session : commence la connexion, et se termine quand l'utilisateur arrte son navigateur, ou aprs un temps d'inactivit paramtrable (xable par la mthode setMaxInactiveInterval(int interval) de la classe HttpSession. Chaque utilisateur connect aura sa propre version d'un bean session. application signie que le bean existe pour toute la dure de vie du serveur tomcat ; le bean est alors unique pour tous les utilisateurs.
Servlets et JSP 66 / 78

M. Belguidoum (UMC)

JavaBeans

Accs aux beans depuis les jsp


Les balises spciques au beans sont : <jsp:getProperty ... /> permet de remplir les valeurs des champs du bean :
name : nom du bean (id="...") property : nom de la proprit, qui doit tre un des champs dnis par le bean. <jsp:setProperty ... /> permet de xer la valeur d'un champ du name : nom du bean ; property : nom du champ ; value : valeur donner au champ.

bean :

M. Belguidoum (UMC)

Servlets et JSP

67 / 78

JavaBeans

Accs aux beans depuis les jsp

<! doctype html PUBLIC ' -// W3C // DTD HTML 3.2// EN '> <html > <head > < title > test Beans 1 </ title > </ head > <body > <!-- dclaration du bean --> < jsp : useBean id =" cpt " scope =" application " class =" test . Compteur "/> <!-- utilisation du bean --> Le compteur vaut : < jsp : getProperty name = " cpt " property = " valeur "/> Quand on fixe la valeur , on utilise en plus l ' attribut <tt > param </ tt >. <% // Utilisation du bean par du code java : cpt . incremente (); %> </ body > </ html >

M. Belguidoum (UMC)

Servlets et JSP

68 / 78

JavaBeans

accs aux beans depuis les servlets

La cration et la lecture des beans depuis des servlets dirent selon la porte (scope) du bean : session et application.

session : On doit procder en deux temps.


les mthodes

Il faut d'abord rcuprer un objet de classe HttpSession HttpSession session= request.getSession(true);

On peut ensuite rcuprer ou donner une valeur d'un bean en utilisant :

GenericServlet (dont hrite toute servlet) renvoie un objet de classe ServletContext, qui reprsente l'application. Cet objet dispose lui aussi de mthodes setAttribute et getAttribute.

application : la mthode getServletContext() de la classe

getAttribute

et

setAttribute

M. Belguidoum (UMC)

Servlets et JSP

69 / 78

JavaBeans

Architecture JSP : modle 1

M. Belguidoum (UMC)

Servlets et JSP

70 / 78

JavaBeans

Architecture JSP : modle 2

M. Belguidoum (UMC)

Servlets et JSP

71 / 78

JavaBeans

Architecture MVC

modle

etc.)

= les donnes accdes par un code Java (JDBC, RMI, EJB,

= JSP contrleur = servlets


vues

M. Belguidoum (UMC)

Servlets et JSP

72 / 78

JavaBeans

Architecture MVC : principe de fonctionnement


1

Par le biais d'une page web, l'utilisateur met une requte HTTP au serveur web en cliquant sur un lien ou sur un bouton. Cette requte est prise en charge par le contrleur (servlet). Le contrleur excute les traitements ncessaires (appelle un EJB Stateless par exemple) et rcupre le modle, c'est--dire les entity beans. Le contrleur slectionne alors la JSP qui sera en charge de la construction de la rponse et lui transmet les entity beans contenant les donnes acher. La JSP construit la rponse en faisant appel aux accesseurs des entity beans. La rponse HTTP est transmise au navigateur qui l'ache sous forme de page web.
M. Belguidoum (UMC) Servlets et JSP 73 / 78

JavaBeans

Architecture MVC
Syntaxe dans la servlet pour lancer la JSP :
public void doPost ( HttpServletRequest request , HttpServletResponse response ){ // hrite de GenericServlet ServletContext context = getServletContext (); RequestDispatcher dispatcher = context . getRequestDispatcher ( "/ maPageMiseEnForme . jsp " ); dispatcher . forward ( request , response ); }

La JSP extrait les objets de request grce getAttribute()


ArrayList theList = ( ArrayList ) request . getAttribute (" nomDelObjet " ); // maintenant , utiliser l ' ArrayList %> <%

M. Belguidoum (UMC)

Servlets et JSP

74 / 78

JavaBeans

Architecture MVC

La servlet peut passer des valeurs la JSP appel grce


setAttribute()
public void doPost ( HttpServletRequest request , HttpServletResponse response ) { ArrayList theList = // un objet passer // ajoute la requte request . setAttribute (" nomDelObjet " , theList ); ServletContext context = getServletContext (); RequestDispatcher dispatcher = context . getRequestDispatcher ( "/ jspAAppeler . jsp " ); dispatcher . forward ( request , response ); }

M. Belguidoum (UMC)

Servlets et JSP

75 / 78

Conclusion

1 2 3 4 5

Introduction Servlet et JSP Quelques fonctionnalits JavaBeans Conclusion

M. Belguidoum (UMC)

Servlets et JSP

76 / 78

Conclusion

Conclusion

les Servlets permettent de dvelopper des applications Web en Java Plusieurs fonctionnalits
traitement des donnes fournies par les utilisateurs gestion de session gestion de cookies Collabiration et partage d'information et de contrle format d'archivage .war

servlet : reprsente la partie contrle de l'architecture MVC d'une application web intraction avec JSP et java beans

M. Belguidoum (UMC)

Servlets et JSP

77 / 78

Conclusion

Rfrences

http://java.sun.com/javaee/5/docs/api/index.html Tutorial : http: //java.sun.com/javaee/5/docs/tutorial/doc/bnafd.html http://java.sun.com/products/servlet/index.html

JSP et servlets ecaces : production de sites dynamiques, cas pratiques, Jean Luc Deleage Documentation :

bas sur les cours de : Lionel Seinturier, Mickal BARON, Gal Thomas, etc.

M. Belguidoum (UMC)

Servlets et JSP

78 / 78

Você também pode gostar