jsp.pdf
-
Upload
marilyne-migan -
Category
Documents
-
view
9 -
download
0
Transcript of 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
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
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 !
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é
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.
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>
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.
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
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>
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,…
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
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.
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.
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.
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
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 */ %>
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>
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.
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,…
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.
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
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.
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.
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%>’’ />
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
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.
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’’);
}
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,…)
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.
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>
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).
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