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
keulkeul.blogspot.com
keulkeul.blogspot.com
Utilisation dun outil daide la conception de page WEB avec prise en charge de code JSP
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
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 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" %>
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
Le fichier entete.html
<%@ 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
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" %>
isErrorPage : vaut true si la page est une erreur et false pour une page normale
<%@ page isErrorPage=false %>
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
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(); } %> ...
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
<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
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
<title>Bonjour tout </title> </head> <body> <%! public void jspInit() { compteur = 23; } %> <%! String compteur; %> La valeur du compteur est <%= compteur %> </body> </html>
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(); }
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>
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" %>
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
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>
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
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
keulkeul.blogspot.com
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
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" />
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" />
Valeur explicite donner la proprit. Ne peut pas tre combin l'attribut param
Les noms des paramtres de requte doivent tre identiques aux noms des proprits
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>
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
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
Partage du contrle
Utilisation des tags action JSP include et forward
JSP - M. Baron - Page 166
Enregistrement dans le contexte courant dune valeur pour lattribut attribut1 page2.jsp
keulkeul.blogspot.com
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
Partage du contrle : distribuer un renvoi Cette redirection se fait galement au moment de la requte
<jsp:forward page="page.html" />
effectuer des modifications sur la rponse avant un renvoi (ignores) placer du code en squence la suite dun renvoi
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
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
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)
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
Ressource rediriger
Dans la JSP
ou
keulkeul.blogspot.com
<% monpackage.MonBean idbean = (monpackage.MonBean)request.getAttribute("idbean"); %> <%= 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); } }
package monpackage; keulkeul.blogspot.com public class MonBean { public String getMessage() { return "Message issu du Bean"; } }
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>
keulkeul.blogspot.com