jsp.pdf

32
ISI1022:ProgrammationInternetetJava Jean-Noël Sorenti Année 2002/2003 ProgrammationInternetetJava 1 LesJavaServerPages ISI 1022 : Programmation Internet et Java Jean-Noël Sorenti. Année 2002/2003

Transcript of jsp.pdf

Page 1: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

1

Les Java Server Pages

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti. Année 2002/2003

Page 2: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

2

Les Java Server Pages

l Plan du Cours :

• Définition d’une JSP• Syntaxes des JSP• Utilisation conjointe de Servlets et JSP

Page 3: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

3

Introduction

l Problème des Servlets avec le HTML :

• Il n ’est pas souhaitable d’écrire du HTML dans lesinstructions out.println, surtout si ce dernier n ’apas besoin d ’être généré dynamiquement• Tout changement HTML nécessite un changementdans le source Java et une recompilation.• L ’équipe de conception HTML est souventséparée ce celle des développeurs Java.• La lecture est plus lourde et souvent difficile !

Page 4: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

4

Introduction

l Pourquoi des pages JSP ?

• Les Java Server Pages constituent une autreapproche de la production de contenu dynamique :

• code JSP directement dans une page HTML• pas de recompilation ‘ manuelle ’ si changement du codeHTML. On a une Auto-re compilation effectuée par leServeur transparente pour l’utilisateur.

• Meilleure lisibilité

Page 5: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

5

Rôle des JSP

l Chacun son rôle :

• Une bonne attribution des rôles entre les Servlets,JSP, JavaBeans est vitale pour la fabricationd ’application Web de qualités (faciles à maintenir,…)

• La séparation entre HTML et Java grâce à uneassociation de Servlet, de JSP, de JavaBeans, etde classes Java est l’un des thèmes majeurs dece cours.

Page 6: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

6

Les Java Server Pages

l Comparaison avec les Servlets :• Une Servlet est une classe Java générant généralement dessorties HTML en réponse aux requêtes HTTP.• Une page JSP est une page HTML contenant du code Java,exécuté par le serveur lorsque cette dernière est demandée :

• On parle de Servlet inversé :

servlet jsp

…javaout.println(‘ <HTML >’);out.println(variable);out.println(‘ </HTML> ’);

<%…java%><HTML><%=variable%></HTML>

Page 7: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

7

Mécanisme des JSP

l Mécanisme des Java Server Pages :

• Au premier appel d ’une JSP :• Le serveur détecte l’extension .jsp• Implémente la classe java correspondante sous formede Servlet ! (Génère une classe java).• Compilation de la classe.• Instancie la Servlet générée…

• Chaque fois qu’une page JSP est appelée :• Appel de la méthode service() de l ’instance.

Remarque : Une page JSP peut être déployée avec sa classe compilée. Unepage JSP peut aussi être chargée au démarrage.

Page 8: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

8

Mécanisme des JSP

l Mécanisme des Java Server Pages :

<HTML><BODY><%=new java.util.Date()%></BODY></HTML>

Public class Date_jsp implements HttpServlet {public void service(HttpServletRequest requestHttpServletResponse response) {…response.setContentType(‘ text/html ’);JspWriter out = response.getWriter();…out.println(‘ <HTML> ’);out.println(‘ <BODY> ’);out.println(new java.util.Date());out.println(‘ </BODY> ’);out.println(‘ </HTML> ’);…}}

date.jspDate_jsp.java

Date_jsp.class

Générationautomatiquede la Servletassociée.

Compilationautomatiquede la classe

Répertoire cachetemporaire

Page 9: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

9

Mécanisme des JSP

l Exemple JSP avec sample.jsp :

l Utilisation :• /sample.jsp?NOM=Toto

<HTML><BODY><%String nom = request.getParameter(‘NOM’);if (nom!=null) { %>Vous avez bien passé votre nom dans leparamètre NOM qui est égal à <%=nom%>

<%} else { %> Veuillez entrer un nom ! <% } %>

</BODY></HTML>

Page 10: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

10

Eléments de Scripts

l Dans une page JSP, le code Java est embarquée àl’aide d’éléments de scripts. Ces derniers sont deplusieurs types :

• Déclaration : <%! Java %> : on pourra ajouter des attributs etméthodes à la Servlet.• Expression : <%= Java %> : les expressions sont évaluées etles résultats insérés.• Scriplets : <% Java %> : code java directement copié dansla servlet.• Directives : <%@directive [option=‘value’]* %> : Pour «effectuer des import de classes, packages ou documents,…

Page 11: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

11

Eléments de Scripts

l Autre exemple de JSP :<%@ include file=‘entete.jsp’ %><% ! private int nbAppels;

private int getNbAppels() {return ++nbAppels;

}%><html><head><title>Autre exemple</title></head>

<body>Cette page a été appelée <%=getNbAppels()%> fois.<% if (nbAppels==1) { out.println(‘premier appel’) } %><% if (nbAppels==10) { %> dixième appel <% } %>

</body></html>

Déclaration

Expression

Scriplet

Directive

Page 12: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

12

Eléments de Scripts : Directives

l Liste de directives définies dans la spécificationJSP :

• include : inclusion d’un fichier spécifié au moment dela traduction (compilation).

• tabglib : pour l’utilisation de balises personnalisées*.• page : multi directive. (comprend un certain nombred’option)

(*) Nous aborderons la notion de taglib dans les prochains cours.

Page 13: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

13

Eléments de Scripts : Directive page

l Option de la directive page : <%@page option %>• import : Identique à l’instruction ‘import’ dans un fichier source java :import = ‘java.util.*,java.text.*’• buffer : Ajuste la taille mémoire tampon de sortie : soit ‘none’, ou unecertaine taille : buffer=’16k’• contentType : définit la sortie de la page JSP : contentType=‘text/html’• errorPage : page à afficher si une exception est récupérée à partir de cettepage : errorPage=‘fichier’• isErrorPage : cette page s’affiche en réponse aux exceptions issuesd’autres pages. La valeur par défaut est ‘false’: isErrorPage=‘true’• autoFlush : la valeur par défaut est ‘true’. L’exception est levée si l’optionest réglée sur ‘false’ et que la mémoire tampon déborde.

Page 14: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

14

Commandes JSPl Il existe aussi des actions JSP interprétées à l’exécution de lapage (contraire au éléments de scripts utilisés à lacompilation) : <jsp : action param1="value1" param2="value2" />• Récupération d’un bean dans le request ou la session• <jsp:useBean id="nom" scope="conteneur" class="tp1servlet.Table" />• Inclusion dynamique d’une page• <jsp:include page="nompage" flush="true" />• Chaînage vers une autre ressource• <jsp: forward page="url" /> ou <jsp:forward page="url" >(*)</jsp:forward>• Ajout de paramètres dans le request.(*)• <jsp:param name="message" value="hello" />• <jsp:param name="peter" value="<%=peterVal%>" />• Modifications et récupération d’une valeur d’un bean• <jsp:setProperty name=‘’beanID’’ property=‘’propName’’ value=‘’val’’ />• <jsp:getProperty name=‘’beanID’’ property=‘’propName’’ />• Appel d’un plugin externe• <jsp:plugin type=‘’applet’’ code=‘’jweb.samples.SimpeApplet.class’’ />

<jsp:plugin type=‘’applet’’ code=‘’jweb.samples.SimpeApplet.class’’ /> est une autre façonsd’inclure une applet dans une page HTML. Le fait de l’écrire coté serveur fait quele processeur JSP insèrera la balise <applet> adaptée au navigateur.Nous verrons par la suite plus en détail le fonctionnement de ces actions JSP.

Page 15: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

15

Utilisation d’objets implicites

l L’environnement donne accès àcertains objets dans les JSP :• out de type JspWriter : flux de sortie pour écrire la réponse.• request de type HttpServletRequest : requête du client.• response de type HttpServletResponse : réponse renvoyée auclient.• session de type HttpSession : la session en cours pour le clientqui a émis la requête.• config de type ServletConfig : les paramètres d’initialisation dela servlet en cours de traitement.• pageContext : le contexte de la page JSP• page : l’instance de la page elle même.• exception : l’exception qui a engendré l’appel de la page

Page 16: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

16

Commentaires

l Plusieurs façons d’insérer des commentairesdans une JSP :

• Commentaires du HTML (sur le contenu). Envoyé aunavigateur : <!– commentaires -->• Commentaires du JSP (Visible uniquement dans lefichier source JSP) : <%-- commentaires --%>• Commentaires du Java (Visible uniquement dans lesscriplets) : <% /* commentaires */ %>

Page 17: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

17

Options pour le déploiement de JSP

l On peut aussi déployer une JSP avec uneentrée dans le fichier web.xml :• Si on désire créer un mapping pour la page• Passage de paramètres d’initialisation

<web-app><servlet>

<servlet-name>Simple.jsp</servlet-name><jsp-file>/examples/Simple.jsp</jsp-file><init-param>

<param-name>nom</param-name><param-value>valeur</param-value>

</init-param></servlet><servlet-mapping>

<servlet-name>simple</servlet-name><url-pattern>/simple</url-pattern>

</servlet-mapping></web-app>

Page 18: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

18

Utilisation conjointe de Servlets et JSP

l L’utilisation conjointe de Servlets et JSPdans une application Web est monnaiecourante.

l Les Servlets et JSP ont donc des atoutsdifférents.

l Utiliser tous les atouts possibles impliqueraune utilisation conjointe.

Page 19: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

19

Utilisation conjointe de Servlets et JSP

l Rappel :

• L’aspect métier et traitement peut être réservé auxServlets.• L’aspect présentation des données peut êtreréservé aux JSPs.• Une Servlet doit pouvoir appeler une JSP.• Une JSP doit pouvoir appeler une autre JSP,…

Page 20: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

20

Utilisation conjointe : Exemple du login

l Application Login : première approche

Client Web

LoginDemande desaisie del’utilisateuret de sonpassword.

BienvenueVous êtesmaintenantlogué en tantque ‘user’.

Servlet ou JSP

Serveur

LoginRe Demandede saisie del’utilisateuret de sonpasswordavec erreur.

1

2

3

4

5

user/password

1: La login Servlet génère un HTML avec la demande de Login.2: Le user/password est envoyé au serveur3: Login mauvais : renvoie d’une page avec signalement d’erreur et redemandede Login4: Le nouveau user/password est envoyé au serveur5: Login ok. Une page de bienvenue est renvoyée au navigateur.

Page 21: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

21

Utilisation conjointe : Exemple du login

l Problème de l’exemple précédent :

• Complexité de la Servlet :• Effectue les tests de login.• Gère la présentation de saisie login• Gère la présentation de login ok.

• Solution :• Répartition des tâches.• Formulaires multiples

Page 22: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

22

Utilisation conjointe : Exemple du login

l Application Login : nouvelle approche

Client Web

LoginDemande desaisie del’utilisateuret de sonpassword.

BienvenueVous êtesmaintenantlogué en tantque ‘user’.

LoginServerPage

Serveur

LoginRe Demandede saisie del’utilisateuret de sonpasswordavec erreur.

1

2

3

4

5

user/password

BienvenueServerPage

forwards5

On sépare la présentation de l’écran Bienvenue de celle de l’écran Login.

Page 23: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

23

Utilisation conjointe : Exemple du login

l Application Login : nouvelle approche

Client Web

LoginDemande desaisie del’utilisateuret de sonpassword.

BienvenueVous êtesmaintenantlogué en tantque ‘user’.

LoginServerPagePrésentation

Serveur

LoginRe Demandede saisie del’utilisateuret de sonpasswordavec erreur.

1

2,4

3

5

user/password

BienvenueServerPage

forwards5

Login Servlet(Traitements)

forwards 1,3

Servlet FrontController :gère la logiqueapplicative

Dans ce cas, pour l’action Login, on sépare aussi les traitements de laprésentation.

Page 24: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

24

Utilisation conjointe : Répartiteur de requêtes

l Les ‘forwards’ s’effectuent à l’aide d’unrépartiteur de requêtes de typeRequestDispatcher :• RequestDispatcher dispatcher =request.getRequestDispatcher(’’/next.jsp’’);• dispatcher.forward(request,response)

l Dans une page JSP, l’écriture est simplifiée,on utilise l’action forward :• <jsp:forward page= ’’/next.jsp’’ />• <jsp:forward page= ’’<%=url%>’’ />

Page 25: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

25

Répartiteur de requête : forward

Public class Login extends HttpServlet {…public void service(HttpServletRequest request, HttpServletResponse response) {

String user = request.getParameter(‘’user’’);String pass= request.getParameter(‘’password’’);

RequestDispatcher dispatcher = null;if (verif(user,pass)==true)

dispatcher = request.getRequestDispatcher(‘’/login.jsp’’);else

dispatcher = request.getRequestDispatcher(‘’/bienvenue.jsp’’);

dispatcher.forward(request,response);}

…}

l Exemple d’utilisation de forward

Page 26: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

26

Répartiteur de requête : forward

l Restriction dans l’utilisation de forward :• Aucune sortie ne doit être effectuée en amont ou enaval d’un forward, on aurais alors uneIllegalStateException générée :

public void service(HttpServletRequest request, HttpServletResponse response) {PrintWriter out = response.getWriter();out.println(‘’ce message ne s’affichera pas car forward en aval… car letampon va être vidé par le dispatcher.forward…’’);RequestDispatcher dispatcher = request.getRequestDispatcher(‘’/login.jsp’’);dispatcher.forward(request,response);out.println(‘’Ce message ne s’affichera pas car forward en amont (impliqueque le tampon est fermé…’’);

}

La mémoire tampon de out est effacée lors du transfert. (au moment du forward).La mémoire tampon de out est fermée et vidée lorsque l’on reprend la main.Le message en amont ne va pas s’afficher car en réalité, il est affiché lors d’unout.flush() qui est normalement lancé à la fin de la méthode service de la Servlet.Dans le forward, si le flux out contient de l’information (String en amont), alorsune IllegalStateException est générée.

Page 27: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

27

Répartiteur de requête : include

l Nous avons include() fonctionnant exactementcomme forward(), sauf que :• La mémoire tampon n’est pas vidée avant le transfert etexception n’est levée• La mémoire tampon n’est pas vidée, ni fermé lorsque l’onreprend la main .

public void service(HttpServletRequest request, HttpServletResponse response) {PrintWriter out = response.getWriter();out.println(‘’ce message s’affichera avant l’inclusion’’);RequestDispatcher dispatcher = request.getRequestDispatcher(‘’/login.jsp’’);dispatcher.include(request,response);out.println(‘’Ce message s’affichera après l’inclusion’’);

}

Page 28: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

28

Répartiteur de requête : include

l Comme pour le forward, l’include peuts’écrire de façon simplifiée dans une pageJSP :

• <jsp:include page= ’’/next.jsp’’ />• <jsp:include page= ’’<%=url%>’’ />• <jsp:include page= ’’<%=url%>’’ flush=’’true’’/>l Cette fonction est primordiale dans ledéveloppement d’application Web.Ellepermet de structurer les développement(factorisation de pages,…)

Page 29: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

29

Répartiteur de requête : format des documents

l Le Répartiteur de requête nous permet detransférer et/ou d’inclure n’importe quel type deressources via une URL:

• Une Servlet• Une page JSP• Un fichier HTML• etc.…l Les URL utilisées pour forward() et include() sontsoit :• Relatives au contexte Web.*• Relative à la Servlet en cours.*

Une URL relative au contexte Web débute par ‘/’. On récupère l’information àpartir de la racine de l’application. (webapp,…)Une URL relative à la Servlet ne commence pas par ‘/’. L’URL pattern duservlet-mapping est utilisé pour récupérer la ressource.

Page 30: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

30

Répartiteur de requête nommé

l Le Répartiteur de requête nommé nous permet letransfert à une Servlet directement avec son nomet non avec son URL de mapping :

RequestDispatcher dispatcher =getServletContext().getNamedDispatcher("Simple");<web-app>

<servlet><servlet-name>Simple</servlet-name><servlet-class>package.Simple</ servlet-class >

</servlet><servlet-mapping>

<servlet-name>Simple</servlet-name><url-pattern>/simpleURL</url-pattern>

</servlet-mapping></web-app>

Page 31: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

31

Comparaison entre sendRedirect() et forward()

l Différent de forward et include ! (Ou toute la‘chaîne de traitement’ s’effectue sur leServeur).

l HttpResponse.sendRedirect(URL) emploiela commande de re direction de HTTP.

l sendRedirect(URL) envoie le code (302Found) au navigateur qui doitautomatiquement se rediriger vers lanouvelle URL. (Dans ce cas, on ordonne auclient de se rediriger vers la nouvelleressource).

Page 32: jsp.pdf

ISI 1022 : Programmation Internet et Java

Jean-Noël Sorenti – Année 2002/2003

Programmation Internet et Java

32

Comparaison entre sendRedirect() et forward()

Page 1

R2

R1

forwards

Page 2

Page 1

R2

R1

Page 2

sendRedirect (R2)

Navigateur Serveur