Javaserver Pages (JSP) : JSP Le Langage Java

Vous aimerez peut-être aussi

Vous êtes sur la page 1sur 43

JSP

Le langage Java

JavaServer Pages (JSP)

XVIII-1

JMF

JSP

Le langage Java

Prrequis pour ce cours


Ce cours a trait la programmation Java cot serveur Il faut connatre un minimum de technologie J2EE Il faut connatre les servlets

XVIII-2

JMF

JSP

Le langage Java

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 server side include (ssi) Des pages HTML contiennent du code excuter lors de la requte Traiter par le serveur Web car ayant un suffixe caractristique (.shtml, etc.)
XVIII-3 JMF

JSP

Le langage Java

ssi : la technique
Le serveur Web, lorsqu'une telle page est demande, passe la main au programme adquat qui traite la partie de la page le concernant. Ce programme gnre la partie dynamique en HTML La page HTML cre dans son ensemble est retourne au client Web.
XVIII-4 JMF

JSP

Le langage Java

JavaServer Pages
= JSP = la technique des ssi en Java = une page HTML contenant du code Java => meilleure division des tches :
prsentation gnrale par les graphistes cot dynamique par des programmeurs (Java)

XVIII-5

JMF

JSP

Le langage Java

Comment a marche ?
Concrtement :
toute la page HTML est convertie en une servlet cette servlet est traite par le moteur Java intgr au serveur Web (technologie des servlets) et retourne la page HTML construite

XVIII-6

JMF

JSP

Le langage Java

JSP vs. Servlets


Servlet = du code Java contenant de l'HTML JSP = une page HTML contenant du code Java Concrtement avec les JSP :
les parties statiques de la page HTML sont crites en HTML les parties dynamiques de la page HTML sont crites en Java
XVIII-7 JMF

JSP

Le langage Java

Notre premire JSP


fichier date.jsp
<html><head><title>Obtenu par une JSP</title></head> <body> <h3>Bonjour de ma part </h3> <hr> La date courante est : <%= new java.util.Date() %> </body> </html>

Trait quand le client demande l URL de la JSP :


http://serveurWeb:<port>/.../date.jsp

XVIII-8

JMF

JSP

Le langage Java

Moteurs de JSP (et de servlets)


Pour excuter des JSP (resp. des servlets), il faut un moteur de JSP (resp. de servlets) dans le serveur Web. Ces moteurs sont des plug-in pour des serveurs Web existants Souvent des serveurs Web eux mmes Deux candidats plug-in : JRun (www.allaire.com), tomcat (jakarta.apache.org)
XVIII-9 JMF

JSP

Le langage Java

Serveurs Web et JSP


Il existe des serveurs Web qui traitent les servlets et JSP :
IBM WebSphere iPlanet Enterprise 4.x (ex Netscape)

Voir java.sun.com/products/jsp

XVIII-10

JMF

JSP

Le langage Java

Tomcat
Dvelopp par la communaut qui implmente les spcifs servlets et JSP. Tlchargeable (en version d'utilisation lmentaire) gratuitement
http://jakarta.apache.org/downloads/bin index.html

Plug-in de Apache version 1.3 ou plus, Microsoft IIS version 4.0 ou plus, Netscape Enterprise Server version 3.0 ou plus
XVIII-11 JMF

JSP

Le langage Java

Tomcat (suite)
Peut tre utilis comme serveur Web (bien qu'industriellement dconseill) Existe pour plusieurs Unix et Win32 Pour Win32 un .zip ou .exe de 8 Mo Lire doc\readme (et les fichiers du rpertoire doc) Ncessite d'avoir un JRE 1.1 ou plus
XVIII-12 JMF

JSP

Le langage Java

Bidouilles Tomcat
Il faut aussi :
positionner la variable TOMCAT_HOME au rpertoire racine de la hirarchie d'installation de Tomcat. Exemple :
set TOMCAT_HOME=C:\jakarta-tomcat-3.2.3

positionner la variable JAVA_HOME au rpertoire racine de la hirarchie du JDK. Exemple :


set JAVA_HOME=C:\Applications\jdk1.3

XVIII-13

JMF

JSP

Le langage Java

Tomcat et JSP
Des exemples de JSP (code + liens pour l'excution) sont disponibles dans
REP_INSTALL_TOMCAT/webapps/examples/jsp /index.html

XVIII-14

JMF

JSP

Le langage Java

Excution de JSP
Il faut mettre les pages JSP dans un endroit particulier du serveur Web Cet endroit dpend du serveur Web et de sa configuration Pour tomcat en configuration standard,
http://serveurWeb/examples/jsp/date.jsp

~
REP_INSTAL_TOMCAT\webapps\examples\jsp\ date.jsp
XVIII-15 JMF

JSP

Le langage Java

Excution de JSP (suite)


Le rsultat de date.jsp est :

Une autre excution donne une autre date => dynamicit


XVIII-16 JMF

JSP

Le langage Java

Que s'est il pass ?


Le moteur de JSP a construit une servlet (_0002fjsp_0002fdate_0002ejspdate_jsp_0.java dans
REP_INSTALL_TOMCAT\work\localhost_8080%2Fexamples

Cette phase est parfois appele la traduction de la JSP Puis a compil et excut la servlet

XVIII-17

JMF

JSP

La servlet construite

Le langage Java

package jsp; ... public class _0002fjsp_0002fjsp_0002fdate_0002ejspdate_jsp_1 extends HttpJspBase { ... public void _jspService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ... _jspx_init(); ... pageContext = _jspxFactory.getPageContext(...); session = pageContext.getSession(); out = pageContext.getOut(); // HTML // begin [file="C:\\...\\examples\\jsp\\date.jsp";from=(0,0);to=(4,24)] out.write("<html><head><title>Obtenu par une JSP</title></head>\r\n <body>\r\n\r\n<h3>Bonjour de ma part</h3> < hr>\r\n La date courante est : "); // end //begin [file="C:\\...\\examples\\jsp\\date.jsp";from=(4,27)to=(4,49)] out.print( new java.util.Date() ); // end // HTML // begin [file="C:\\...\\examples\\jsp\\date.jsp";from=(4,51);to=(6,7)] out.write("\r\n</body>\r\n</html>"); // end ... } }

XVIII-18

JMF

JSP

Le langage Java

Algorithme d'excution de la JSP


Requte client La servlet associe la JSP demande est-elle charge en mmoire du moteur de servlets ? Non Non Oui servlet prcompile disponible? Non Oui Traduire en servlet et compiler
Le fichier JSP a-til t modifi depuis la dernire traduction en servlet ?

Oui

Conteneur de JSP

Charger la servlet

Non

Rponse au client

Excuter la servlet

XVIII-19

JMF

JSP

Le langage Java

3 parties d'une JSP


scriptlets <% %> dclarations <%! %> expressions <%= %>

XVIII-20

JMF

JSP

Le langage Java

Scriptlets <%

%>

contient du code Java insrer dans _jspservice() de la servlet, donc peut utiliser out, request, response, etc. Exemple :
<% 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>"); } %> XVIII-21 JMF

JSP

Le langage Java

Dclarations <%!

%>

Sont des dclarations Java. Seront insres comme des membres de la servlet Permet de dfinir des mthodes ou des donnes membres Exemples :
<%! int random4() { return (int)(Math.random() * 4); } %> <%! int nombreFetiche = 2; %>

XVIII-22

JMF

JSP

Le langage Java

Expressions <%=
Un raccourci pour <% attention au ;

%>

En fait expression Java qui renvoie un objet String ou un type primitif.


out.println(); %> <%= XXX %> ~ <% out.println(XXX); %>

est donc converti en out.println() dans la mthode _jspService() de la servlet.


La somme est: <%= (195 + 9 + 273) %> <%= request.getParameter("email_address") %> JMF Je vous rponds l'adresse : XVIII-23

JSP

Le langage Java

Objets prdfinis dans une JSP


3 objets peuvent tre immdiatement utiliss dans une expression ou une scriptlet d'une JSP :
out

: le canal de sortie request (HttpServletRequest) : l'objet requte response (HttpServletResponse) : l'objet rponse

Il y en a d'autres Cf. ces mmes objets dans une servlet


XVIII-24 JMF

JSP

Le langage Java

Un exemple complet :
complet.jsp
<html><head><title>JSP complet</title></head> <body> <%! String[] langages = {"Java", "C++", "Smalltalk", "Simula 67"}; int random4() { return (int) (Math.random() * 4); } %> <p>Parmi tous les langages orients objets :</p> <ol> <% for (int i=0; i < langages.length; i++) { out.println("<li>" + langages[i] + "</li>"); } %> </ol> <p>Le prochain que j'apprends est <b><%= langages[random4()] %> </b></p> </body> </html> XVIII-25 JMF

JSP

Le langage Java

complet.jsp

XVIII-26

JMF

JSP

Le langage Java

Dboguer les JSP


La fentre de lancement du serveur Web donne des indications. Suivant les serveurs, une page HTML est retourne avec des indications. Ces lments sont trs souvent relatifs la servlet et pas la page JSP. Directives <%@ page errorPage= ...%> et
<%@ page isErrorPage="true"%>
XVIII-27 JMF

JSP

Le langage Java

Dboguer les JSP (suite)


Un page JSP peut rfrencer une page erreur par <%@ page
errorPage="page.jsp"%>

La page erreur est indique par l'entte


<%@ page isErrorPage="true"%>

Si une exception est leve le traitement est drout vers la page erreur qui connat la rfrence exception qui repre l'exception
XVIII-28 JMF

JSP

Le langage Java

Dboguer les JSP : exemple


langages.jsp
<%@ page errorPage="erreur.jsp"%> <%! String[] langages = {"Java", "C++", "Smalltalk", "Simula 67"}; %> <p>Parmi tous les langages orients objets :</p> <ol> <% // leve d'une ArrayIndexOutOfBoundsException for (int i=0; i < 7; i++) { out.println("<li>" + langages[i] + "</li>"); } %>

XVIII-29

JMF

JSP

Le langage Java

Dboguer les JSP : exemple (suite)


erreur.jsp
<%@ page isErrorPage="true"%> <html><body> exception leve <b> <%= exception %> </b> <hr> <h3>trace de la pile</h3> <pre> <% java.io.PrintWriter myWriter = new java.io.PrintWriter(out); exception.printStackTrace(myWriter); %> </pre> </body></html>

XVIII-30

JMF

JSP

Le langage Java

Dboguer les JSP : exemple (fin)


Charger la page langages.jsp amne :

XVIII-31

JMF

JSP

Le langage Java

Enchaner les pages


Un page JSP peut en appeler une autre par la directive : <jsp:forward> Syntaxe :
<jsp:forward page="pageDeRedirection" />

lanceForward.jsp
<% String repUtilisateur = request.getParameter("repTextField"); int rep = Integer.parseInt(repUtilisateur); if ((rep % 2) == 0) { %> <jsp:forward page="gagne.jsp"/> <% } else { %> <jsp:forward page="perdu.jsp"/> <% } %> On n'affiche jamais cela XVIII-32 JMF

JSP

Le langage Java

Enchaner les pages (suite)


Aprs un <jsp:forward>, le traitement est entirement pris en charge par nouvelle page
Serveur Web Navigateur 1. lanceForward.jsp <jsp:forward page="gagne.jsp"/> 3. Retourner gagne.jsp gagne.jsp worker.jsp Transmis gagne.jsp lanceForward.jsp

XVIII-33

JMF

JSP

Le langage Java

JSP et Java beans


But : avoir le moins de code Java possible dans une page JSP (HTML) Sous-traiter le code un Java bean balise XML : <jsp:useBean>

XVIII-34

JMF

JSP

Le langage Java

JSP et Java beans (suite)


Syntaxe gnrale :
<jsp:useBean id="nomInstanceJavaBean" class="nomClasseDuBean" scope="request|session|application|page "> </jsp:useBean>

Le bean est alors utilisable par nomInstanceJavaBean balise sans corps donc utilisation de
<jsp:useBean />
XVIII-35 JMF

JSP

Le langage Java

l'attribut scope
Il indique la porte du bean.
valeur
request page session application

Description
Le bean est valide pour cette requte. Il est utilisable dans les pages de redirection de la requte (<jsp:forward>). Il est dtruit la fin de la requte. Similaire request, mais le bean n'est pas transmis aux pages de redirection <jsp:forward>. C'est la porte par dfaut Le bean est valide pour la session courante. S il n existe pas encore dans la session courante, il est cr et plac dans la session du client. Il est rutilis jusqu ce que la session soit invalide Le bean est valide pour l application courante. Il est cr une fois et partag par tous les clients des JSP.

XVIII-36

JMF

JSP

Le langage Java

JSP et Java beans : exemple


Soit le bean :
public class SimpleBean implements java.io.Serializable { private int compter; public SimpleBean() { compter = 0; } public void setCompter(int theValue) { compter = theValue; } public int getCompter() { return compter; } public void increment() { compter ++; } }

XVIII-37

JMF

JSP

Le langage Java

Utilisation du bean dans une JSP


Utilisation l'aide de son nom Rcupration des proprits :
Par appel de mthode getXXX() : Par la balise <jsp:getProperty >
<p> on repere le bean par le nom nomBean<br> <jsp:useBean id="nomBean" class="SimpleBean" scope="session"> </jsp:useBean> <p> On accede a une proprite avec une expresion: <br> compteur = <%= nomBean.getCompter() %> <hr> On incrmente le compteur <% nomBean.increment(); %> <p>On peut accder la proprit par une balise :<br> <jsp:getProperty name="nomBean" property="compter" />

XVIII-38

JMF

JSP

Positionner les proprits du bean dans une JSP

Le langage Java

Par appel de mthode setXXX(...) : Par la balise <jsp:setProperty >


<p> on repere le bean par le nom nomBean<br> <jsp:useBean id="nomBean" class="SimpleBean" scope="session"> </jsp:useBean> <p> On positionne une proprite avec une expresion: <br> compteur = <%= nomBean.setCompter(6) %> <p>ou par une balise :<br> <jsp:setProperty name=noBean" property="compter" value="6" />

XVIII-39

JMF

JSP

Le langage Java

Architecture MVC
modle = les donnes accdes par un code Java (JDBC, RMI, EJB, etc.) vues = JSP contrleur = servlets

XVIII-40

JMF

JSP

Le langage Java

Architecture MVC (suite)


Modle Servlet (Contrleur)
1 2

Composants

Requte

JSP (Vue) Rponse


4

Syntaxe dans la servlet pour lancer la JSP :


public void doPost(HttpServletRequest request, HttpServletResponse response){ ServletContext context = getServletContext(); // hrite de GenericServlet RequestDispatcher dispatcher = context.getRequestDispatcher("/maPageMiseEnForme.jsp"); dispatcher.forward(request, response); }

XVIII-41

JMF

JSP

Le langage Java

Architecture MVC (suite)


La servlet peut passer des valeurs la JSP appel grce setAttribute()
public void doPost(HttpServletRequest request, HttpServletResponse response) {

// appelle les mthodes sur les objets mtiers 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); }

La JSP extrait les objets de request grce getAttribute()


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

XVIII-42

JMF

JSP

Le langage Java

Bibliographie
JavaServer Pages. Hans Bergsten; ed O'Reilly. ISBN 1-56592-746-X Technologie Apache/Tomcat
http://jakarta.apache.org

XVIII-43

JMF

Vous aimerez peut-être aussi