Anda di halaman 1dari 42

Cest quoi JSP ?

JSP = Java Server Pages Une JSP est un fichier contenant du code HTML et des fragments de code Java excuts sur le moteur de Servlets Comparable aux langages cts serveur de type PHP, ASP, Les pages JSP sont converties en Servlet par le moteur de Servlets lors du premier appel la JSP
Lecture Rponse HTTP Requte HTTP

helloJSP.jsp

Phase de traduction

3 keulkeul.blogspot.com 1 6 5
Client WEB Serveur Web avec conteneur JSP Excute Gnre

HelloServlet.java

Compile

Phase de traitement de la requte HelloServlet.class

JSP - M. Baron - Page 134

Ok mais HelloWorld avec une Servlet Exemple : HelloWorld version Servlet


Besoin de modifier le fichier web.xml
public class HelloWorldServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("<html>"); out.println(" <head>"); out.println(" <title>Bonjour tout le monde</title>"); out.println(" </head>"); out.println(" <body>"); out.println(" <h1>Bonjour tout le monde</h1>"); out.println(" Nous sommes le " + (new java.util.Date().toString()) + " et tout va bien."); out.println(" </body>"); out.println("</html>"); } } La partie structure du document HTML doit tre prcise laide de laffichage de sortie : devient vite contraignant

keulkeul.blogspot.com

JSP - M. Baron - Page 135

HelloWorld avec une JSP Exemple : HelloWorld version JSP


helloworldjsp.jsp doit tre plac la racine de lapplication WEB
Pas besoin de modifier le fichier web.xml
Ajout de fragment de code Java
<html> <head> <title>Bonjour tout le monde</title> </head> <body> <h1>Bonjour tout le monde</h1> Nous sommes le <%= new java.util.Date().toString() %> et tout va bien. </body> </html>

keulkeul.blogspot.com

Utilisation dun outil daide la conception de page WEB avec prise en charge de code JSP

JSP - M. Baron - Page 136

HelloWorld avec une JSP aprs la gnration Exemple : HelloWorld version Servlet
public final class helloworldjsp_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { HttpSession session = null; ... Hrite de javax.servlet.jsp.HttpJspPage try { implmente la mthode _jspService() ... quivalente service() _jspx_out = out; out.write("<html>\r\n");out.write("\t<head>\r\n"); out.write("\t\t<title>Bonjour tout le monde</title>\r\n"); out.write("\t</head>\r\n");out.write("\t<body>\r\n"); out.write("\t\t<h1>Bonjour tout le monde</h1>\r\n"); out.write("\t\tNous sommes le ");out.print( new java.util.Date().toString() ); out.write(" et tout va bien.\r\n");out.write("\t</body>\r\n");out.write("</html>"); } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; ... if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finally { if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context); } } }

keulkeul.blogspot.com

JSP - M. Baron - Page 137

HelloWorld et les fichiers Servlet, JSP et Servlet gnre Arborescence dune application WEB : le retour
Les fichiers JSP sont la racine de lapplication WEB au mme endroit que les fichiers HTML

keulkeul.blogspot.com

Les Servlets gnres sont places dans le rpertoire work

JSP - M. Baron - Page 138

Les Tags JSP Les Tags permettent de diffrencier le code HTML au code Java Tag de directive :
<%@ %>
Attention ne pas se tromper dans la nomination des tags. Ils ont tous une signification diffrente

Tag de commentaire :
<%-- blabla --%>

Tag de dclaration :
<%! %>
keulkeul.blogspot.com

lments de scripts

Tag de Scriplet :
<% %>

Tag dexpression :
<%= %>
JSP - M. Baron - Page 139

Directives JSP Les directives contrlent comment le serveur WEB doit gnrer la Servlet Elles sont places entre les symboles <%@ et %> Les directives suivantes sont disponibles
include : indique au compilateur dinclure un autre fichier
<%@ include file="unAutreFichier" %>

tudi en fin de partie

taglib : indique une bibliothque de balises a utiliser


keulkeul.blogspot.com

<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>

page : dfinit les attributs spcifiques une page (voir aprs)


JSP - M. Baron - Page 140

Directives JSP : include Cette inclusion se fait au moment de la conversion


<%@ include file="unAutreFichier" %>

Tout le contenu du fichier externe est inclus comme sil tait saisi directement dans la page JSP Ne concerne que les ressources contenues dans le contexte La racine du chemin du fichier inclure est la racine du contexte
keulkeul.blogspot.com

Pas de sparation de la porte des variables


Il ny a pas la possibilit de construire une chane dinterrogation
JSP - M. Baron - Page 141

Directives JSP : include Exemple : inclusions par la directive JSP


<HTML> <HEAD> <TITLE>Page de dmonstration</TITLE> </HEAD> <BODY>

Le fichier entete.html

<%! String mon_nom; %> <% mon_nom = "Baron Mickael"; %>

<%@ include file = "/entete.html" %> <%@ include file = "/corps.jsp" %> La variable name Bonjour <%= mon_nom %> est dfinie dans corps.jsp <%@ include file = "/piedpage.html" %>

keulkeul.blogspot.com

Le fichier corps.jsp
Je suis dans le pied de page. </BODY> </HTML>

Le fichier piedpage.html

JSP - M. Baron - Page 142

Directives JSP : page La directive page dfinit les attributs spcifiques une page
import : importe un paquetage Java. Cette directive rsulte en une instruction import dans la Servlet
<%@ page import="java.util.*, java.text.*" %>

langage : dfinit le langage de script utilis dans la page contentType : dfinit le type de contenu de la page gnre
<%@ page contentType="text/plain" %>

errorPage : indique la page afficher si une exception se produit


keulkeul.blogspot.com

pendant le traitement de la requte HTTP


<%@ page errorPage="toto.jsp" %>

isErrorPage : vaut true si la page est une erreur et false pour une page normale
<%@ page isErrorPage=false %>

JSP - M. Baron - Page 143

lments de scripts JSP : commentaire Cet lment de script est utilis pour faire un commentaire dans le code JSP Le texte dans un commentaire JSP ne sera pas envoy au client ni compil dans la Servlet Les commentaires sont placs entre les symboles <%-- et <html> --%> <head>
<title>Bonjour tout le monde</title> </head> <body> <!-- affichage d'un message classique --> <h1>Bonjour tout le monde</h1> Nous sommes le <%= new java.util.Date().toString() %> et tout va bien. <%-- Utilisation de la classe Date --%> </body> </html>

keulkeul.blogspot.com

Les commentaires JSP napparaissent pas dans le code HTML du client

JSP - M. Baron - Page 144

lments de scripts JSP : dclaration Une dclaration permet dinsrer du code dans la classe de la Servlet Les dclarations sont places entre <%! et %> Elle peut tre utilise pour
Dclarer un attribut de classe Spcifier et implmenter des mthodes
<%! private int count = 0; private int incrementCount() { return count++; } %> keulkeul.blogspot.com

Les attributs et les mthodes dclares dans la page JSP sont utilisables dans toute la page JSP Possibilit de redfinir des mthodes jspInit() et jspDestroy()
A voir plus tard au moment du cycle de vie dune JSP
JSP - M. Baron - Page 145

lments de scripts JSP : scriplet Cest un bloc de code Java qui est plac dans _jspService() de la Servlet gnre (quivalent service(...)) Les scriplets sont places entre les symboles <% et %> Tout code java a accs :
aux attributs et mthodes dfinis par le tag dclaration <%! %> aux objets implicites
Code HTML En gnral les scriplets ne sont jamais utilises, prfrez lutilisation des balises personnalises (Taglib)
keulkeul.blogspot.com
... <% for (int i = 0; i < 5 ; i++) { %> HelloWorld<br> <% incrementCount(); } %> ...

Code JSP : scriplet

Mthode dclare par llment de scripts dclaration prcdent

Ne pas oublier le ;
JSP - M. Baron - Page 146

lments de scripts JSP : expression Sert valuer une expression et renvoyer sa valeur Les expressions sont places entre les symboles <%= %> Retourne une valeur String de lexpression Correspond une scriplet comme <% out.println(); %> Se transforme en out.println(""); dans la mthode _jspService() aprs gnration lments de scripts
JSP : scriplet
... <% String[] noms={"mickey","donald"}; for (int i = 0 ; i < noms.length ; i++) { %> Le <%= i %> me nom est <%= noms[i] %> <% } %> ...

keulkeul.blogspot.com

Ne pas ajouter de ; la fin d'un lment script expression

lments de scripts JSP : expression

JSP - M. Baron - Page 147

lments de scripts JSP : bilan lments de scripts et gnration de Servlet


Dclaration Scriplet
public final class example_jsp extends HttpJspBase { String contenu[] = {"raoul","john","nicolas"}; public void _jspService(HttpServletRequest req, HttpServletResponse res) throws IOException, ... { out.write("\t\t<title>Bonjour tout le monde</title>\r\n"); out.write("\t</head>\r\n"); out.write("\t<body>\r\n"); for (int i = 0; i <contenu.length; i++) { out.write("\t\t\tLe "); out.print( i+1 ); out.write(" me nom est "); out.print( contenu[i] ); out.write(" <p>\r\n"); out.write("\t\t"); } out.write("\t\t\r\n"); out.write("\t</body>\r\n"); }

<html> <head> <title>Bonjour tout </title> </head> } <body> <%! String contenu[] = {"raoul","john","nicolas"}; %> <% for (int i = 0; i <contenu.length; i++) { %> Le <%= i+1 %> me nom est <%= contenu[i] %> <p> <% } %> </body> </html>

keulkeul.blogspot.com

Expression
JSP - M. Baron - Page 148

lments de scripts JSP : scriplet et objets implicites Les objets implicites sont les objets prsents dans la mthode service() qui ont t employs dans la partie Servlet Ils sont identifis par des noms de variables uniques :
request : requte courante response : rponse courante session : session courante
Les objets implicites ne sont utilisables que dans les lments de scripts JSP de type scriplet et expression (dans la mthode service()

out : flot de sortie permet lcriture sur la rponse application : contient des mthodes log() permettant d'crire des messages dans le journal du contenu (ServletContext) pageContext : utilis pour partager directement des variables entre des pages JSP et supportant les beans et les balises exception : disponible uniquement dans les pages erreurs donnant information sur les erreurs

keulkeul.blogspot.com

JSP - M. Baron - Page 149

lments de scripts JSP : scriplet et objets implicites Exemple : JSP qui rcupre des informations du client
<%@ page language="java" contentType="text/html" %> <html> <head> <title>Informations du client</title> </head> <body bgcolor="white"> Protocol : <%= request.getProtocol() %><br> Scheme : <%= request.getScheme() %><br> ServerName : <%= request.getServerName() %><br> ServerPort : <% out.println(request.getServerPort()); %><br> RemoteAddr : <% out.println(request.getRemoteAddr()); %><br> RemoteHost : <% out.println(request.getRemoteHost()); %><br> Method : <%= request.getMethod() %><br> </body> </html>

keulkeul.blogspot.com

Objets implicites uniquement visibles dans une scriplet ou une expression JSP
JSP - M. Baron - Page 150

Cycle de vie dune JSP Le cycle de vie d'une Java Server Page est identique une Servlet
La mthode jspInit() est appele aprs le chargement de la page La mthode _jspService() est appele chaque requte La mthode jspDestroy() est appel lors du dchargement (fermeture d'une base de donnes)

Possibilit de redfinir dans le code JSP les mthodes jspInit() et jspDestroy() en utilisant un lment de scripts <html> dclaration <head>
keulkeul.blogspot.com

Redfinition de la mthode jspInit()

<title>Bonjour tout </title> </head> <body> <%! public void jspInit() { compteur = 23; } %> <%! String compteur; %> La valeur du compteur est <%= compteur %> </body> </html>

JSP - M. Baron - Page 151

Cycle de vie dune JSP Exemple : compteur avec une initialisation et une destruction
<%@ page language="java" contentType="text/html" %> <%@ page import="java.util.Date" %> <%! int global_counter = 0; Date start_date; L'objet public void jspInit() { start_date = new Date(); }

implicite application n'est pas disponible ici, ne pas l'utiliser !!!!

public void jspDestroy() { ServletContext context = getServletConfig().getServletContext(); context.log("test.jsp a t visite " + global_counter + "fois entre le " + start_date + " et le " + (new Date())); } keulkeul.blogspot.com %> <html> <head><title>Page avec un compteur</title></head> <body bgcolor="white"> Cette page a t visite : <%= ++global_counter %> fois depuis le <%= start_date %>. </body></html>

JSP - M. Baron - Page 152

Technique de gestion des erreurs Permet de contrler la gestion des erreurs pendant l'excution de l'application WEB Les erreurs sont dclenches par l'intermdiaire des exceptions et transmises une page d'erreur La dfinition de la page d'erreur se fait par la directive page et l'attribut errorPage
<%@ page errorPage="erreur.jsp" %> ... code JSP lanant l'exception

keulkeul.blogspot.com

Lancement d'une exception possible dans le reste de la page JSP Impossibilit dans une page JSP de dclarer plus d'une page d'erreur

Possibilit de transmettre des informations la page d'erreur par la mthode GET ..."erreur.jsp?debug=log" %>

JSP - M. Baron - Page 153

Technique de gestion des erreurs Une page JSP est dfinie comme une page erreur par la directive page et l'attribut isErrorPage
<%@ page isErrorPage=true %> ... code JSP traitant l'erreur

Quand false il s'agit d'une page standard, true une page erreur

Possibilit de manipuler l'exception qui a t lance par l'objet implicite exception (Exception)
exception.getMessage() : renvoie le message d'erreur dcrivant l'exception
keulkeul.blogspot.com

exception.printStackTrace() : retourne la liste des appels de mthodes ayant conduit l'exception


Une page erreur doit tre obligatoirement une page JSP La rfrence exception n'est utilisable que dans les lments de scripts Scriplet et Expression
JSP - M. Baron - Page 154

Technique de gestion des erreurs Exemple : une division par zro avec gestion de l'erreur
<%@ page language="java" contentType="text/html" %> <%@ page errorPage="errorpage.jsp" %> <html> <head> <title>Page avec une erreur</title> </head> <body bgcolor="white">

Rsultat sans la gestion <% int var = 90; %> Division par <% var = var / 0; %> <%= var %> de l'exception </body> </html> <%@ page language="java" contentType="text/html" %> <%@ page isErrorPage="true" %> Division par zro : exception lance
keulkeul.blogspot.com
<html> <head> <title>Page grant une erreur</title> </head> <body bgcolor="white"> J'ai vu passer une erreur qui est <%= exception.getMessage() %> </body> </html>

Rsultat avec la gestion de l'exception

JSP - M. Baron - Page 155

JSP et Actions Les actions permettent de faire des traitements au moment o la page est demande par le client
utiliser des Java Beans inclure dynamiquement un fichier rediriger vers une autre page
Linclusion et la redirection fonctionnent sur un principe commun voqu dans la partie Servlet

Les actions sont ajoutes la page JSP l'aide d'une syntaxe d'lments XML (dfinis par des balises personnalises)
Balise ouvrante
keulkeul.blogspot.com <ma:balise ... />

Balise fermante

ou
Deux critures diffrentes, lune quand il ny a pas de corps et lautre quand il y en a un
<ma:balise ... > ... </ma:balise>

corps
JSP - M. Baron - Page 156

Java Beans Permet de coder la logique mtier de l'application WEB L'tat d'un Bean est dcrit par des attributs appels proprits La spcification des Java Beans dfinit les Beans comme des classes qui supportent principalement
keulkeul.blogspot.com

Introspection : permet l'analyse d'un Bean (nombre de proprits) vnements : mtaphore de communication Persistance : pour sauvegarder l'tat d'un Bean
JSP - M. Baron - Page 157

Java Beans Les Java Beans sont des classes Java respectant un Respecter absolument ensemble de directives
Un constructeur public sans argument
la convention d'criture

Les proprits d'un Bean sont accessibles au travers de mthodes getXXX (lecture) et setXXX (criture) portant le nom de la proprit

Lecture et criture des proprits


type getNomDeLaProprit() : pas de paramtre et son type est celui de la proprit
keulkeul.blogspot.com

void setNomDeLaProprit(type) : un seul argument du type de la proprit et son type de retour est void

En option, un Java Beans implmente l'interface java.io.Serializable permettant la sauvegarde de l'tat du Bean JSP - M. Baron - Page

158

Java Beans Exemple : le retour de la classe Voiture


public class Voiture { private int puissance; private boolean est_demarree; private double vitesse; public void setDemarree(boolean p) { est_demarree = p; } public boolean getDemarree() { return est_demarree; } public void setVitesse(double p) { vitesse = p; } public double getVitesse() { return vitesse; } public int getPuissance() { return puissance; } }

Utilise le constructeur par dfaut ne possdant aucun paramtre

Proprit Demarree visible en lecture et en criture

Proprit Vitesse visible en lecture et en criture

keulkeul.blogspot.com

Proprit Puissance visible en lecture uniquement

JSP - M. Baron - Page 159

Java Beans et JSP Pour dclarer et allouer un Java Beans dans une page JSP il faut employer l'action <jsp:useBean>
<jsp:useBean id="Nom" class="Package.class" scope="atribut" />

id = "nom de l'instance" : nom de l'instance pour identification class = "Nom de la classe" : package du Bean scope = "attribut" : champ d'existence de l'objet Bean request : Bean valide pour la requte et peut tre transmise (forward)
keulkeul.blogspot.com

page : idem request sans transmission (le cas de lobjet Contenu dans le pageContext) session : Bean ayant la dure de vie de la session

ServletContext de lapplication web

application : Bean cre pour l'application WEB courante

JSP - M. Baron - Page 160

Java Beans et JSP : lecture proprits Pour lire une proprit du Bean deux lments sont utiliss
La rfrence du Bean dfinie par l'attribut id Le nom de la proprit

Deux manires existent pour interroger la valeur d'une proprit et la convertir en String
En utilisant un tag action <jsp:getProperty>
<jsp:getProperty name="rfrence Bean" property="nom proprit" />

Rfrence du Bean dsigne dans l'attribut id


keulkeul.blogspot.com

Nom de la proprit en minuscule

En utilisant l'lments de scripts JSP : expression


<%= nom_instance.getNomPropriete() %>

Rfrence du Bean dsigne dans l'attribut id

Mthode lie la proprit


JSP - M. Baron - Page 161

Java Beans et JSP : criture proprits Modification de la valeur d'une proprit en utilisant le tag action <jsp:setProperty>
<jsp:setProperty name="rfrence" property="nom proprit" param="param" value="valeur" />

Rfrence du Bean dsigne dans l'attribut id

Nom de la proprit modifier crit en minuscule

Nom d'un paramtre de requte contenant la valeur pour la proprit indique

Valeur explicite donner la proprit. Ne peut pas tre combin l'attribut param

Modification de l'ensemble de proprits suivant les paramtres fournis par la requte


keulkeul.blogspot.com <jsp:setProperty name="rfrence" property="*" />

Les noms des paramtres de requte doivent tre identiques aux noms des proprits

Efficacit : modification des proprits


JSP - M. Baron - Page 162

Java Beans et JSP : lecture et criture proprits Exemple : caractristique d'une voiture (simplifie)
<%@ page language="java" contentType="text/html" %> <jsp:useBean id="ma_voiture" class="Voiture"></jsp:useBean> <% ma_voiture.setDemarree(true); ma_voiture.setVitesse(21.2); %>

keulkeul.blogspot.com

<html> <head> <title>Page pour lecture d'information</title> </head> <body bgcolor="white"> La voiture a-t-elle dmarr: <%= ma_voiture.getDemarree() %><br> La vitesse de la voiture est de : <jsp:getProperty name="ma_voiture" property="vitesse" /> km/h<br> Interrogation par La puissance de la voiture est de : <jsp:getProperty tag Expression name="ma_voiture" property="puissance" /> CV </body> </html>

Modification des proprits du Bean Voiture par Scriplet

La classe Voiture doit tre place dans le rpertoire WEB-INF\classes

Interrogation par tag Action. Le nom de la proprit en minuscule

JSP - M. Baron - Page 163

Java Beans et JSP : scope Exemple : affectation et rcupration des valeurs d'un Bean
<%@ page language="java" contentType="text/html" %> <jsp:useBean id="mon_bean1" scope="page" class="SimpleName"></jsp:useBean> <jsp:useBean id="mon_bean2" scope="session" class="SimpleName"></jsp:useBean> <jsp:useBean id="mon_bean3" scope="application" class="SimpleName"></jsp:useBean> <jsp:setProperty name="mon_bean1" property="name" value="page"/> <jsp:setProperty name="mon_bean2" property="name" value="session"/> <jsp:setProperty name="mon_bean3" property="name" value="application"/>

keulkeul.blogspot.com

Champs d'utilisation <html> <head><title>Page pour criture d'information</title></head> de l'objet Java Bean <body bgcolor="white"> Avant<br> mon_bean1 = <%= mon_bean1.getName() %><br> mon_bean2 = <%= mon_bean2.getName() %><br> mon_bean3 = <%= mon_bean3.getName() %><br> <FORM METHOD=GET ACTION="lecture.jsp"> <p align="center"><input type="submit" name="Submit"></p> </FORM> </body> </html>
JSP - M. Baron - Page 164

Java Beans et JSP : scope Exemple : affectation et rcupration des valeurs d'un Bean
<%@ page language="java" contentType="text/html" %> <jsp:useBean id="mon_bean1" scope="page" class="SimpleName"></jsp:useBean> <jsp:useBean id="mon_bean2" scope="session" class="SimpleName"></jsp:useBean> <jsp:useBean id="mon_bean3" scope="application" class="SimpleName"></jsp:useBean> <html> <head> <title>Page pour criture d'information</title> </head> <body bgcolor="white"> Aprs<br> mon_bean1 = <jsp:getProperty name="mon_bean1" property="name" /><br> mon_bean2 = <jsp:getProperty name="mon_bean2" property="name" /><br> mon_bean3 = <jsp:getProperty name="mon_bean3" property="name" /><br> </body> </html>

keulkeul.blogspot.com

JSP - M. Baron - Page 165

Collaboration de JSP Rappel sur la collaboration (voir partie Servlet)


partage dinformation : un tat ou une ressource partage du contrle : une requte

Processus identique la collaboration de Servlet pour le partage dinformation et de contrle Partage dinformation
Utilisation du contexte pour transmettre des attributs
keulkeul.blogspot.com

Mthode getContext(), setAttribute() et getAttribute()

Partage du contrle
Utilisation des tags action JSP include et forward
JSP - M. Baron - Page 166

Partage dinformation Exemple : transmettre un simple attribut tout un contexte


page1.jsp
Enregistrement dans le contexte d'un attribut <% application.setAttribute("attribut1","Bonjour tout le monde"); %>

Objet implicite application est de type ServletContext

Enregistrement dans le contexte courant dune valeur pour lattribut attribut1 page2.jsp

<% out.println(application.getAttribute("attribut1")); %>

Lecture dans le contexte courant de la valeur de lattribut attribut1

keulkeul.blogspot.com

Rsultat dune requte la page2.jsp sans envoie de requte page1.jsp

Peut-tre vue comme une variable globale lapplication WEB

Rsultat dune requte la page2.jsp aprs envoie de requte page1.jsp


JSP - M. Baron - Page 167

Partage du contrle : distribuer une inclusion Cette inclusion se fait au moment de la requte
La page incluse peut-tre un fichier HTML ou JSP <jsp:include page="/page.html" />

La racine du chemin de la page est celle du contexte Le serveur excute la ressource dynamique indique et inclut sa sortie au contenu envoy au client Ne peut dfinir ni le code dtat ni la valeur des en-ttes Possibilit de transmettre des informations lors de linclusion
keulkeul.blogspot.com <jsp:include page="/page.jsp" /> <jsp:param name="defaultparam" value="nouvelle" /> </jsp:include>

La transmission dinformations autre que des simples chanes de caractres ne peut tre ralise directement

Dfinition dun paramtre appel defaultparam


JSP - M. Baron - Page 168

Partage du contrle : distribuer un renvoi Cette redirection se fait galement au moment de la requte
<jsp:forward page="page.html" />

Les choses ne pas faire

Le racine du fichier doit tre ici celle du contexte (quivaut /page.html)

effectuer des modifications sur la rponse avant un renvoi (ignores) placer du code en squence la suite dun renvoi

Possibilit de transmettre des informations lors dun renvoi


keulkeul.blogspot.com <jsp:forward page="/page.jsp" /> <jsp:param name="defaultparam" value="nouvelle" /> </jsp:forward>

Dfinition dun paramtre appel defaultparam

JSP - M. Baron - Page 169

Partage du contrle : remarques ... La partage du contrle et plus prcisment linclusion et le renvoi par des balises actions ne permettent pas le transfert dattributs au sens objet (uniquement des chanes de caractres) Obligation de passer par un objet RequestDispatcher et lobjet implicite request Exemple pour une inclusion (mme chose pour un renvoi)
keulkeul.blogspot.com <% RequestDispatcher dispatch = request.getRequestDispatcher("/fichier.jsp");%> <% request.setAttribute("attribut1","bonjour"); %> <% dispatch.include(request,response); %>

Objet implicite

JSP - M. Baron - Page 170

Collaboration de Servlets et JSP : architecture MVC Un constat : les pages JSP doivent contenir le moins de Java Besoin de structurer le code plus finement selon les comptences de chaque technologies (JSP, Servlet, ) Utilisation du modle darchitecture : MVC (Modle Vue Contrleur)
Requte

Servlet
2 1
Contrle

Redirection
3 keulkeul.blogspot.com 5
Client WEB Serveur Web

Java Bean

JSP
Vue

Modle

Vers les couches mtiers et accs aux donnes (SGBD)

Rponse
JSP - M. Baron - Page 171

Collaboration de Servlets et JSP : architecture MVC Architecture MVC (en rgle gnrale)
Le contrle est gr par les Servlets (pas de sortie dans la rponse) Le modle est gr par les Beans (ne connat pas le contrle ni la vue) La vue est gre par les JSP (pas de contrle)

Besoin de savoir communiquer entre des Servlets et des JSP


Requte envoye par le client (1)
keulkeul.blogspot.com

Communication entre le contrle et le modle (2) Transmission la page JSP des informations du Java Bean (3) La page JSP utilise les informations du Java Bean traduit (4) La vue est envoye en rponse au client (5)
JSP - M. Baron - Page 172

Collaboration de Servlets et JSP : architecture MVC Dans la Servlet


Instance du Bean envoye comme attribut

Ressource rediriger

bean = new MonBean(...); req.setAttribute("idbean", bean); RequestDispatcher dispatch = this.getServletContext().getRequestDispatcher("/page.jsp"); dispatcher.forward(req,res);

Dans la JSP

Mme nom que lattribut donn dans la Servlet

<jsp:useBean id="idbean" class="monpackage.MonBean" scope="request"/> <%= idbean... %>

ou
keulkeul.blogspot.com
<% monpackage.MonBean idbean = (monpackage.MonBean)request.getAttribute("idbean"); %> <%= idbean... %>

<%@ page import="monpackage.MonBean" %> <% MonBean idbean = (MonBean)request.getAttribute("idbean"); %>

Pour viter de mettre les noms de package utilisation de la directive page import
JSP - M. Baron - Page 173

Collaboration de Servlets et JSP : architecture MVC Exemple : application MVC qui dit Bonjour ...
... import monpackage.MonBean;

public class Controle extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { MonBean bean = new MonBean(); req.setAttribute("idbean", bean); RequestDispatcher disp = this.getServletContext().getRequestDispatcher("/page.jsp"); disp.forward(req,res); } }

Cette Servlet gre le contrle. Il dispatche la vue

package monpackage; keulkeul.blogspot.com public class MonBean { public String getMessage() { return "Message issu du Bean"; } }

En gnrale pas de sortie sur la rponse de la Servlet


Ce Java Bean gre le modle de lapplication WEB
JSP - M. Baron - Page 174

Collaboration de Servlets et JSP : architecture MVC Exemple (suite) : application MVC qui dit Bonjour ...
<HTML> <jsp:useBean id="idbean" class="monpackage.MonBean" scope="request"/> <HEAD><TITLE>Architecture MVC : Java EE</TITLE></HEAD> <BODY> 1re solution en <%= idbean.getMessage() %> utilisant la tag </BODY> action useBean </HTML>

Peu de contrle dans les pages JSP ...


<%@ page import="monpackage.MonBean" %> <HTML> <HEAD><TITLE>Architecture MVC : Java EE</TITLE></HEAD> <BODY> <% MonBean idbean = (MonBean)request.getAttribute("idbean");%> <%= idbean.getMessage() %> </BODY> </HTML>

2me solution en utilisant lobjet implicite request

keulkeul.blogspot.com

Vos Beans doivent tre dfinis obligatoirement dans un package

JSP - M. Baron - Page 175

Anda mungkin juga menyukai