Vous êtes sur la page 1sur 29

Java Server Pages (JSP)

dveloppement dapplications Web

Prsent par: Y.GAMHA Dvelopp par: J. Lonchamp

Dfinition des JSP


Standard pour construire des applications Web. Portable. Excut par un moteur de servlets dans un conteneur JSP : Tomcat, JRun, Websphere Mlange de HTML et de code Java dans une mme page. Equivalent de PHP et ASP. Mais plus propre que PHP. Mais moins propritaire que ASP. De nombreuses librairies : les TagLibs.
2

Architecture
Les pages JSP sont converties en servlet Java et compiles avant dtre excutes.

Compilation
La traduction et la compilation nont lieu que si cest ncessaire : lors du premier appel de la page ou aprs modification.

Exemple: Une premire page JSP


<html> <head> <title>Bonjour tout le monde</title> </head> fragment de code <body> Java <h1>Bonjour tout le monde</h1> Nous sommes le <%= new java.util.Date().toString() %> et tout va bien. </body> </html>

Ce fichier helloword.jsp doit tre plac la racine de lapplication Web sur le serveur (au mme endroit que les pages HTML). Pas besoin de modifier le fichier web.xml
5

La servlet gnre :
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; ... try { ... _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() ); le fragment 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); } } } _jspService() est similaire la mthode service() des servlets.

La syntaxe de base : les tags JSP


Les Tags permettent de diffrencier les fragments JSP du code HTML :
Tag de directive : <%@ une_directive %> Sert contrler comment le serveur Web gnre la Servlet. Tag de commentaire : <%-- un_commentaire --%> Le commentaire JSP nest pas envoy au client ni compil dans la Servlet. Tag de dclaration : <%! une_dclaration %> Sert insrer du code Java. Tag de scriplet : <% un_scriptlet %> Un scriplet est un bloc de code Java. Tag dexpression : <%= une_expression %> Sert valuer une expression et renvoyer sa valeur.
7

La directive include
La directive include indique au compilateur dinclure un autre fichier :
<%@ include file="unAutreFichier" %>

Ne concerne que les ressources contenues dans le contexte de lapplication Web. La racine du chemin du fichier inclure est la racine du contexte.

La directive page
Dfinit les attributs spcifiques une page.
import : importe un paquetage Java. langage : dfinit le langage de script utilis dans la page. contentType : dfinit le type de contenu de la page gnre (type MIME). errorPage : indique la page afficher si une exception se produit pendant le traitement de la requte HTTP. isErrorPage : vaut true si la page est une erreur et false pour une page normale.

Exemples :
<%@ <%@ <%@ <%@ page page page page import="java.util.*, java.text.*" %> contentType="text/plain" %> errorPage="toto.jsp" %> isErrorPage=false %>

Les dclarations
Utilises pour :
dclarer un attribut de classe, spcifier et implmenter des mthodes.

Ex :
<%! private int count = 0; private int incrementCount() {return count++;} %>

Les attributs et les mthodes dclares dans la page JSP sont utilisables dans toute la page JSP. Possibilit de redfinir les mthodes du cycle de vie des pages comme jspInit() et jspDestroy().

10

Les scriplets
Bloc de code Java. Peut accder :
aux attributs et mthodes dfinis par le tag dclaration, aux objets implicites : request (HttpServletRequest), response (HttpServletResponse), session (HttpSession), out (JspWriter extends PrintWriter), application (ServletContext), page (this) Ex :
... <% for (int i = 0; i < 5 ; i++) { %> HelloWorld<br> <% incrementCount(); } <%-- dfini prcdemment --%> %> <% out.println(request.getServerPort()); %> ...
11

Les expressions
Retourne la valeur de lexpression comme une String. Correspond une scriplet comme <% out.println(); %> Est transform en out.println(""); aprs gnration. Ex :
... <% String[] noms={"mickey","donald"}; for (int i = 0 ; i < noms.length ; i++) { %> Le <%= i %> me nom est <%= noms[i] %> <% } %> ...

12

Le cycle de vie dune JSP


Identique au cycle de vie dune Servlet. 1. La mthode jspInit() est appele aprs le chargement de la page. 2. La mthode _jspService() est appele chaque requte. 3. La mthode jspDestroy() est appel lors du dchargement (ex: fermeture d'une base de donnes) Possibilit de redfinir dans le code JSP les mthodes jspInit() et jspDestroy() en utilisant une dclaration. Ex :
<html> <body> <%! public void jspInit() { compteur = 23; } %> <%! String compteur; %> La valeur du compteur est <%= compteur %> </body> </html>

13

Les actions
Les actions permettent de faire des traitements au moment o la page est demande par le client :
utiliser des Java Beans, rediriger vers une autre page, inclure dynamiquement un fichier.

Linclusion et la redirection fonctionnent sur le mme principe que celui dcrit pour les servlets. Les actions sont ajoutes la page JSP l'aide d'une syntaxe la XML :
Soit : <jsp:balise ... /> Soit : <jsp:balise ... > ... </jsp:balise>
14

Les Java Beans


Permettent de coder la logique mtier de l'application Web. Ce sont des classes Java qui respectent un ensemble de rgles :
un constructeur public sans paramtre, des mthodes getXXX (lecture) et setXXX (criture) portant le nom de lattribut (proprit) : type getNomDeLaProprit() : pas de paramtre et son type est celui 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 (lensemble de ses proprits).
15

Exemple
Exemple de Java Bean
Constructeur par public class Voiture { dfaut sans paramtre private int puissance; private boolean est_demarree; private double vitesse; public void setDemarree(boolean p) { est_demarree = p; } public boolean getDemarree() { return est_demarree; Proprits visibles } public void setVitesse(double p) { en lecture et criture vitesse = p; } public double getVitesse() { return vitesse; } public int getPuissance() { Proprit visible en return puissance; lecture seulement } }
16

Declaration dun Bean


Pour dclarer et allouer un Java Bean dans une page JSP il faut utiliser l'action <jsp:useBean>
<jsp:useBean id="nom_instance" class="nom_classe" scope="validit" /> o validit prend les valeurs: page : valide pour la requte sans transmission, request : valide pour la requte et peut tre transmis (forward), session : valide pour la session (contenu dans le ServletContext de lapplication), application : valide pour lapplication Web.

Pour accder une proprit en tant que String :


<jsp:getProperty name="nom_instance" property="nom _proprit" /> ou bien : <%= nom_instance.getNomPropriete() %>
17

Modification dune proprit


Pour modifier la valeur d'une proprit :
<jsp:setProperty name="nom_instance" property="nom _proprit" value="valeur" /> ou bien : <jsp:setProperty name="nom_instance" property="nom _proprit" param= nom_param_requte" /> (la valeur est dans un paramtre de la requte) ou bien : <jsp:setProperty name="nom_instance" property="*" /> (les valeurs sont les paramtres de la requte)

18

Exemple :
<%@ page language="java" contentType="text/html" %> <jsp:useBean id="ma_voiture" class="Voiture"> </jsp:useBean> dans WEB-INF\classes <% ma_voiture.setDemarree(true); ma_voiture.setVitesse(21.2); %> <html> <head> <title>Page pour lecture d'information</title> </head> <body bgcolor="white"> tag expression 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> tag action La puissance de la voiture est de : <jsp:getProperty name="ma_voiture" property="puissance" /> CV </body> 19 </html>

Partage dinformation entre JSP


Processus identique au partage dinformation entre servlets. Utilisation du ServletContext pour transmettre des attributs. Ex: transmission dun attribut dune page une autre
<% application.setAttribute("att1","Bonjour"); %>

(dans page1.jsp) Lobjet implicite application est de type ServletContext.


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

(dans page2.jsp) Pour que le rsultat saffiche il faut appeler page1 avant page2.

Peut tre vu comme une variable globale lapplication Web.


20

Partage du contrle : inclusion


Linclusion se fait au moment de la requte. La page incluse peut tre une page HTML ou JSP. La racine du chemin de la page est celle du contexte. Dans le cas dune ressource dynamique elle est excute et sa sortie est incluse. On peut transmettre des informations lors de linclusion. Ex :
<jsp:include page="/page.html" /> <jsp:include page="/page.jsp" /> <jsp:param name="defaultparam" value="nouvelle" /> </jsp:include>

21

Partage du contrle : dlgation


Le traitement peut tre dlgu au moment de la requte une autre page avec possibilit de passage dinformation.
<jsp:forward page="/page.jsp" /> <jsp:param name="defaultparam" value="nouvelle" /> </jsp:forward>

Il ne faut ni modifier la rponse avant renvoi ni ajouter du code aprs envoi (ignor).

Pour passer des objets et non des String il faut passer par un objet RequestDispatcher et lobjet implicite request.
Exemple pour une inclusion (mme chose pour une dlgation) :
<% RequestDispatcher dispatch = request.getRequestDispatcher("/fichier.jsp");%> <% request.setAttribute("attribut1","bonjour"); %> <% dispatch.include(request,response); %>

22

Architecture MVC
Le modle darchitecture ou pattern MVC (Modle Vue - Contrleur) structure clairement les applications : les modles sont les composants mtiers, les vues sont les composants dinteraction, les contrleurs sont les composants qui organisent les traitements. Dans une application Web J2EE on utilise les Servlets pour les contrleurs, les pages JSP pour les vues, les Java Beans pour les modles. Les Servlets reoivent les requtes, effectuent les contrles et les actions, slectionnent la vue (pas de sortie dans la rponse). Les modles (Java Beans) ne dpendent ni des contrleurs ni des vues. Les vues (pages JSP) nintgrent pas de contrle.
23

Modle MVC
Servlet (contrleur)

1 Navigateur

Donnes

5 1 : requte 2 : instanciation, communication 3 : redirection, communication 4 : communication 5 : rponse

JSP (vue)

Bean 4 (modle)

24

Un exemple simple
a) Un bean
package com.jsp.beans; class User { private String name; public User() { name = ""; } public User(String name) { this.name = name; } public String getName() { return name; } }

b) Une servlet qui utilise ce bean et le passe une page JSP qui prpare le code HTML.
25

package com.jsp.servlets; import com.jsp.beans.User; public class HelloWorldServlet extends HttpServlet implements Servlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doRequest(req,resp); } public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doRequest(req,resp); cration du bean } private void doRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { res.setAttribute("monParam",new User("toto")); loadJSP("helloworld.jsp?page=test", req, resp); } public void loadJSP(String url, HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if (url == null) { return; } if (url.charAt(0) != '/') { url = '/' + url; } ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher(url); rd.forward(req, resp); } }

appel de la page JSP

26

Un exemple simple
c) Une page JSP (helloword.jsp)
<%@ page import="com.jsp.beans.User" %> rcupration du bean <% String page = (String)request.getParameter("page"); User monParam = (User)request.getAttribute("monParam"); %> <html> <head> <title>JSP Test</title> </head> <body> HelloWorld<br /> Passage param direct : <%= monParam.getName() %><br /> Passage par url : <%= page %> </body> </html>
27

Autres fonctionnalits
Les tags personnaliss ( custom tags ). Les bibliothques de tags ( tag libraries ) : collections de tags (au format xml) utilisables dans les pages JSP. JSTL ( JSP Standard Tag Library ) est une collection de bibliothques qui implantent les fonctions communes aux pages web :
bibliothque core : itrations, conditions bibliothque format : localisation, internationalisation bibliothque xml : analyse XML, transformation XSLT bibliothque sql : accs au bases de donnes (sans recourir lAPI JDBC).

Grce ces tags, lcriture de code Java (scriplets) doit devenir exceptionnelle dans les pages JSP.
28

FIN
29