You are on page 1of 32

ISI 1022 : Programmation Internet et Java

Programmation Internet et Java

Jean-Nol Sorenti. Anne 2002/2003

Les Java Server Pages

ISI 1022 : Programmation Internet et Java

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Les Java Server Pages


l

Programmation Internet et Java

Plan du Cours :

Dfinition dune JSP


Syntaxes des JSP

Utilisation conjointe de Servlets et JSP


2

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Introduction
l

Programmation Internet et Java

Problme des Servlets avec le HTML :

Il n est pas souhaitable dcrire du HTML dans les

instructions out.println, surtout si ce dernier n a


pas besoin d tre gnr dynamiquement
Tout changement HTML ncessite un changement
dans le source Java et une recompilation.
L quipe de conception HTML est souvent
spare ce celle des dveloppeurs Java.
La lecture est plus lourde et souvent difficile !
3

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Introduction
l

Programmation Internet et Java

Pourquoi des pages JSP ?

Les Java Server Pages constituent une autre

approche de la production de contenu dynamique :

code JSP directement dans une page HTML


pas de recompilation manuelle si changement du code
HTML. On a une Auto-re compilation effectue par le
Serveur transparente pour lutilisateur.

Meilleure lisibilit
4

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Rle des JSP

Programmation Internet et Java

Chacun son rle :

Une bonne attribution des rles entre les Servlets,

JSP, JavaBeans est vitale pour la fabrication


d application Web de qualits (faciles maintenir,
)

La sparation entre HTML et Java grce une

association de Servlet, de JSP, de JavaBeans, et


de classes Java est lun des thmes majeurs de
ce cours.

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Programmation Internet et Java

Les Java Server Pages


l

Comparaison avec les Servlets :

Une Servlet est une classe Java gnrant gnralement des


sorties HTML en rponse aux requtes HTTP.

Une page JSP est une page HTML contenant du code Java,
excut par le serveur lorsque cette dernire est demande :

On parle de Servlet invers :


java

<%java%>

out.println(variable);

<%=variable%>

out.println( <HTML >);


out.println( </HTML> );

servlet

<HTML>

</HTML>

jsp

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Mcanisme des JSP


l

Programmation Internet et Java

Mcanisme des Java Server Pages :

Au premier appel d une JSP :

Le serveur dtecte lextension .jsp


Implmente la classe java correspondante sous forme
de Servlet ! (Gnre une classe java).
Compilation de la classe.
Instancie la Servlet gnre

Chaque fois quune page JSP est appele :


Appel de la mthode service() de l instance.

Remarque : Une page JSP peut tre dploye avec sa classe compile. Une
page JSP peut aussi tre charge au dmarrage.

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Programmation Internet et Java

Mcanisme des JSP


l

Mcanisme des Java Server Pages :


Date_jsp.class

Public class Date_jsp implements HttpServlet {


<HTML>

<BODY>

public void service(HttpServletRequest request


HttpServletResponse response) {

<%=new java.util.Date()%>

response.setContentType( text/html );

</HTML>

JspWriter out = response.getWriter();

</BODY>

out.println( <HTML> );

out.println( <BODY> );

out.println(new java.util.Date());
out.println( </BODY> );
out.println( </HTML> );

date.jsp
Rpertoire cache
temporaire

Date_jsp.java

Gnration
automatique
de la Servlet
associe.

Compilation
automatique
de la classe

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Mcanisme des JSP


l

Programmation Internet et Java

Exemple JSP avec sample.jsp :


<HTML>
<BODY>
<%
String nom = request.getParameter(NOM);
if (nom!=null) { %>
Vous avez bien pass votre nom dans le
paramtre NOM qui est gal <%=nom%>
<%
} else { %> Veuillez entrer un nom ! <% } %>
</BODY>
</HTML>

Utilisation :
/sample.jsp?NOM=Toto
9

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Elments de Scripts
l

Programmation Internet et Java

Dans une page JSP, le code Java est embarque


laide dlments de scripts. Ces derniers sont de
plusieurs types :

Dclaration : <%! Java %> : on pourra ajouter des attributs et


mthodes la Servlet.
Expression : <%= Java %> : les expressions sont values et
les rsultats insrs.
Scriplets : <% Java %> : code java directement copi dans
la servlet.
Directives :
<%@directive [option=value]* %> : Pour
effectuer des import de classes, packages ou documents,
10

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Elments de Scripts
l

Programmation Internet et Java

Autre exemple de JSP :


Directive

<%@ include file=entete.jsp %>


<% ! private int nbAppels;
Dclaration
private int getNbAppels() {
return ++nbAppels;
}
%>
<html>
Expression
<head><title>Autre exemple</title></head>
<body>

</body>
</html>

Cette page a t appele <%=getNbAppels()%> fois.


<% if (nbAppels==1) { out.println(premier appel) } %>
<% if (nbAppels==10) { %> dixime appel <% } %>
Scriplet

11

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Elments de Scripts : Directives

Programmation Internet et Java

Liste de directives dfinies dans la spcification


JSP :

include : inclusion dun fichier spcifi au moment de


la traduction (compilation).

tabglib : pour lutilisation de balises personnalises*.


page : multi directive. (comprend un certain nombre
doption)

12

(*) Nous aborderons la notion de taglib dans les prochains cours.

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Elments de Scripts : Directive page


l

Programmation Internet et Java

Option de la directive page : <%@page option %>

import : Identique linstruction import dans un fichier source java :


import = java.util.*,java.text.*
buffer : Ajuste la taille mmoire tampon de sortie : soit none, ou une
certaine taille : buffer=16k
contentType : dfinit la sortie de la page JSP : contentType=text/html
errorPage : page afficher si une exception est rcupre partir de cette
page : errorPage=fichier
isErrorPage : cette page saffiche en rponse aux exceptions issues
dautres pages. La valeur par dfaut est false: isErrorPage=true
autoFlush : la valeur par dfaut est true. Lexception est leve si loption
est rgle sur false et que la mmoire tampon dborde.

13

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Commandes JSP
l

Programmation Internet et Java

Il existe aussi des actions JSP interprtes lexcution de la


page (contraire au lments de scripts utiliss la
compilation) : <jsp : action param1="value1" param2="value2" />

Rcupration dun bean dans le request ou la session


<jsp:useBean id="nom" scope="conteneur" class="tp1servlet.Table" />
Inclusion dynamique dune page
<jsp:include page="nompage" flush="true" />
Chanage vers une autre ressource
<jsp: forward page="url" /> ou <jsp:forward page="url" >(*)</jsp:forward>
Ajout de paramtres dans le request.(*)
<jsp:param name="message" value="hello" />
<jsp:param name="peter" value="<%=peterVal%>" />

Modifications et rcupration dune valeur dun bean

<jsp:setProperty name=beanID property=propName value=val />


<jsp:getProperty name=beanID property=propName />

Appel dun plugin externe

<jsp:plugin type=applet code=jweb.samples.SimpeApplet.class />

14

<jsp:plugin type=applet code=jweb.samples.SimpeApplet.class /> est une autre faons

dinclure une applet dans une page HTML. Le fait de lcrire cot serveur fait que
le processeur JSP insrera la balise <applet> adapte au navigateur.
Nous verrons par la suite plus en dtail le fonctionnement de ces actions JSP.

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Utilisation dobjets implicites

Programmation Internet et Java

l Lenvironnement

donne accs
certains objets dans les JSP :

out de type JspWriter : flux de sortie pour crire la rponse.


request de type HttpServletRequest : requte du client.
response de type HttpServletResponse : rponse renvoye au
client.
session de type HttpSession : la session en cours pour le client
qui a mis la requte.
config de type ServletConfig : les paramtres dinitialisation de
la servlet en cours de traitement.
pageContext : le contexte de la page JSP
page : linstance de la page elle mme.
exception : lexception qui a engendr lappel de la page
15

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Commentaires
l

Programmation Internet et Java

Plusieurs faons dinsrer des commentaires


dans une JSP :

Commentaires du HTML (sur le contenu). Envoy au

navigateur : <! commentaires -->


Commentaires du JSP (Visible uniquement dans le
fichier source JSP) : <%-- commentaires --%>
Commentaires du Java (Visible uniquement dans les
scriplets) : <% /* commentaires */ %>

16

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Options pour le dploiement de JSP


l

Programmation Internet et Java

On peut aussi dployer une JSP avec une


entre dans le fichier web.xml :

Si on dsire crer un mapping pour la page


Passage de paramtres dinitialisation

<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>

17

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Programmation Internet et Java

Utilisation conjointe de Servlets et JSP


l

Lutilisation conjointe de Servlets et JSP


dans une application Web est monnaie
courante.
Les Servlets et JSP ont donc des atouts
diffrents.
Utiliser tous les atouts possibles impliquera
une utilisation conjointe.
18

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Programmation Internet et Java

Utilisation conjointe de Servlets et JSP


l

Rappel :

Laspect mtier et traitement peut tre rserv aux

Servlets.
Laspect prsentation des donnes peut tre
rserv aux JSPs.
Une Servlet doit pouvoir appeler une JSP.
Une JSP doit pouvoir appeler une autre JSP,

19

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Programmation Internet et Java

Utilisation conjointe : Exemple du login


l

Application Login : premire approche


1

Login

Login

Demande de
saisie de
lutilisateur
et de son
password.

Re Demande
de saisie de
lutilisateur
et de son
password
avec erreur.

Bienvenue

Vous tes
maintenant
logu en tant
que user.

Servlet ou JSP

user/password

Client Web

Serveur

20

1: La login Servlet gnre un HTML avec la demande de Login.


2: Le user/password est envoy au serveur

3: Login mauvais : renvoie dune page avec signalement derreur et redemande


de Login
4: Le nouveau user/password est envoy au serveur

5: Login ok. Une page de bienvenue est renvoye au navigateur.

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Programmation Internet et Java

Utilisation conjointe : Exemple du login


l

Problme de lexemple prcdent :

Complexit de la Servlet :

Effectue les tests de login.


Gre la prsentation de saisie login
Gre la prsentation de login ok.

Solution :

Rpartition des tches.


Formulaires multiples
21

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Programmation Internet et Java

Utilisation conjointe : Exemple du login


l

Application Login : nouvelle approche


1

Login

Demande de
saisie de
lutilisateur
et de son
password.

Login

Re Demande
de saisie de
lutilisateur
et de son
password
avec erreur.

user/password

forwards

Bienvenue

Vous tes
maintenant
logu en tant
que user.

2 4

Login
ServerPage

Client Web

Bienvenue
ServerPage

Serveur

22

On spare la prsentation de lcran Bienvenue de celle de lcran Login.

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Programmation Internet et Java

Utilisation conjointe : Exemple du login


l

Application Login : nouvelle approche


1

Login

Demande de
saisie de
lutilisateur
et de son
password.

Login

Re Demande
de saisie de
lutilisateur
et de son
password
avec erreur.

Bienvenue

Vous tes
maintenant
logu en tant
que user.

Client Web

Login
ServerPage

Prsentation

forwards

2,4 user/password

1,3

Login Servlet
(Traitements)

Servlet Front
Controller :
gre la logique
applicative

forwards

Bienvenue
ServerPage

Serveur

23

Dans ce cas, pour laction Login, on spare aussi les traitements de la


prsentation.

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Programmation Internet et Java

Utilisation conjointe : Rpartiteur de requtes


l

Les forwards seffectuent laide dun


rpartiteur de requtes de type
RequestDispatcher :

RequestDispatcher dispatcher =

request.getRequestDispatcher(/next.jsp);
dispatcher.forward(request,response)

Dans une page JSP, lcriture est simplifie,


on utilise laction forward :

<jsp:forward page= /next.jsp />


<jsp:forward page= <%=url%> />

24

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Rpartiteur de requte : forward


l

Programmation Internet et Java

Exemple dutilisation de 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);

25

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Rpartiteur de requte : forward


l

Programmation Internet et Java

Restriction dans lutilisation de forward :

Aucune sortie ne doit tre effectue en amont ou en


aval dun forward, on aurais alors une
IllegalStateException gnre :

public void service(HttpServletRequest request, HttpServletResponse response) {


PrintWriter out = response.getWriter();

out.println(ce message ne saffichera pas car forward en aval car le


tampon va tre vid par le dispatcher.forward);

RequestDispatcher dispatcher = request.getRequestDispatcher(/login.jsp);


dispatcher.forward(request,response);

out.println(Ce message ne saffichera pas car forward en amont (implique


que le tampon est ferm);
26

La mmoire tampon de out est efface lors du transfert. (au moment du forward).
La mmoire tampon de out est ferme et vide lorsque lon reprend la main.

Le message en amont ne va pas safficher car en ralit, il est affich lors dun
out.flush() qui est normalement lanc la fin de la mthode service de la Servlet.
Dans le forward, si le flux out contient de linformation (String en amont), alors
une IllegalStateException est gnre.

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Rpartiteur de requte : include


l

Programmation Internet et Java

Nous avons include() fonctionnant exactement


comme forward(), sauf que :

La mmoire tampon nest pas vide avant le transfert et

exception nest leve


La mmoire tampon nest pas vide, ni ferm lorsque lon
reprend la main .
public void service(HttpServletRequest request, HttpServletResponse response) {
PrintWriter out = response.getWriter();

out.println(ce message saffichera avant linclusion);

RequestDispatcher dispatcher = request.getRequestDispatcher(/login.jsp);


dispatcher.include(request,response);
}

out.println(Ce message saffichera aprs linclusion);


27

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Rpartiteur de requte : include


l

Programmation Internet et Java

Comme pour le forward, linclude peut


scrire de faon simplifie dans une page
JSP :

<jsp:include page= /next.jsp />


<jsp:include page= <%=url%> />
<jsp:include page= <%=url%> flush=true/>
l

Cette fonction est primordiale dans le


dveloppement dapplication Web.Elle
permet de structurer les dveloppement
(factorisation de pages,)

28

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Programmation Internet et Java

Rpartiteur de requte : format des documents


l

Le Rpartiteur de requte nous permet de


transfrer et/ou dinclure nimporte quel type de
ressources via une URL:

Une Servlet
Une page JSP
Un fichier HTML
etc.

Les URL utilises pour forward() et include() sont


soit :

Relatives au contexte Web.*


Relative la Servlet en cours.*

29

Une URL relative au contexte Web dbute par /. On rcupre linformation


partir de la racine de lapplication. (webapp,)
Une URL relative la Servlet ne commence pas par /. LURL pattern du
servlet-mapping est utilis pour rcuprer la ressource.

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Rpartiteur de requte nomm


l

Programmation Internet et Java

Le Rpartiteur de requte nomm nous permet le


transfert une Servlet directement avec son nom
et 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>
30

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Programmation Internet et Java

Comparaison entre sendRedirect() et forward()


l

l
l

Diffrent de forward et include ! (Ou toute la


chane de traitement seffectue sur le
Serveur).
HttpResponse.sendRedirect(URL) emploie
la commande de re direction de HTTP.
sendRedirect(URL) envoie le code (302
Found) au navigateur qui doit
automatiquement se rediriger vers la
nouvelle URL. (Dans ce cas, on ordonne au
client de se rediriger vers la nouvelle
ressource).
31

Jean-Nol Sorenti Anne 2002/2003

ISI 1022 : Programmation Internet et Java

Programmation Internet et Java

Comparaison entre sendRedirect() et forward()


R2

Page 2

forwards
Page 1

R1

Page 2

R2

sendRedirect (R2)
Page 1

Navigateur

R1

Serveur

32

Jean-Nol Sorenti Anne 2002/2003

You might also like