Programmation Internet et Java

Transcription

Programmation Internet et Java
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
Jean-Noël Sorenti. Année 2002/2003
Les Java Server Pages
ISI 1022 : Programmation Internet et Java
1
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Les Java Server Pages
l
Programmation Internet et Java
Plan du Cours :
• Définition d’une JSP
• Syntaxes des JSP
• Utilisation conjointe de Servlets et JSP
2
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Introduction
l
Programmation Internet et Java
Problème des Servlets avec le HTML :
• Il n ’est pas souhaitable d’écrire du HTML dans les
•
•
•
instructions out.println, surtout si ce dernier n ’a
pas besoin d ’être généré dynamiquement
Tout changement HTML nécessite un changement
dans le source Java et une recompilation.
L ’équipe de conception HTML est souvent
séparée ce celle des développeurs Java.
La lecture est plus lourde et souvent difficile !
3
Jean-Noël Sorenti – Année 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 effectuée par le
Serveur transparente pour l’utilisateur.
• Meilleure lisibilité
4
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Rôle des JSP
l
Programmation Internet et Java
Chacun son rôle :
• Une bonne attribution des rôles entre les Servlets,
JSP, JavaBeans est vitale pour la fabrication
d ’application Web de qualités (faciles à maintenir,
…)
• La séparation entre HTML et Java grâce à une
association de Servlet, de JSP, de JavaBeans, et
de classes Java est l’un des thèmes majeurs de
ce cours.
5
Jean-Noël Sorenti – Année 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 générant généralement des
sorties HTML en réponse aux requêtes HTTP.
Une page JSP est une page HTML contenant du code Java,
exécuté par le serveur lorsque cette dernière est demandée :
• On parle de Servlet inversé :
…java
<%…java%>
out.println(variable);
<%=variable%>
out.println(‘ <HTML >’);
out.println(‘ </HTML> ’);
servlet
<HTML>
</HTML>
jsp
6
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Mécanisme des JSP
l
Programmation Internet et Java
Mécanisme des Java Server Pages :
• Au premier appel d ’une JSP :
• Le serveur détecte l’extension .jsp
• Implémente la classe java correspondante sous forme
de Servlet ! (Génère une classe java).
• Compilation de la classe.
• Instancie la Servlet générée…
• Chaque fois qu’une page JSP est appelée :
• Appel de la méthode service() de l ’instance.
7
Remarque : Une page JSP peut être déployée avec sa classe compilée. Une
page JSP peut aussi être chargée au démarrage.
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
Mécanisme des JSP
l
Mécanisme 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
Répertoire cache
temporaire
…
}
}
Date_jsp.java
Génération
automatique
de la Servlet
associée.
Compilation
automatique
de la classe
8
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Mécanisme 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
paramètre NOM qui est égal à <%=nom%>
<%
} else { %> Veuillez entrer un nom ! <% } %>
</BODY>
</HTML>
l
Utilisation :
• /sample.jsp?NOM=Toto
9
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Eléments de Scripts
l
Programmation Internet et Java
Dans une page JSP, le code Java est embarquée à
l’aide d’éléments de scripts. Ces derniers sont de
plusieurs types :
•
•
•
•
Déclaration : <%! Java %> : on pourra ajouter des attributs et
méthodes à la Servlet.
Expression : <%= Java %> : les expressions sont évaluées et
les résultats insérés.
Scriplets : <% Java %> : code java directement copié dans
la servlet.
Directives :
<%@directive [option=‘value’]* %> : Pour «
effectuer des import de classes, packages ou documents,…
10
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Eléments de Scripts
l
Programmation Internet et Java
Autre exemple de JSP :
Directive
<%@ include file=‘entete.jsp’ %>
<% ! private int nbAppels;
Déclaration
private int getNbAppels() {
return ++nbAppels;
}
%>
<html>
Expression
<head><title>Autre exemple</title></head>
<body>
</body>
</html>
Cette page a été appelée <%=getNbAppels()%> fois.
<% if (nbAppels==1) { out.println(‘premier appel’) } %>
<% if (nbAppels==10) { %> dixième appel <% } %>
Scriplet
11
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Eléments de Scripts : Directives
l
Programmation Internet et Java
Liste de directives définies dans la spécification
JSP :
• include : inclusion d’un fichier spécifié au moment de
la traduction (compilation).
• tabglib : pour l’utilisation de balises personnalisées*.
• page : multi directive. (comprend un certain nombre
d’option)
12
(*) Nous aborderons la notion de taglib dans les prochains cours.
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Eléments de Scripts : Directive page
l
Programmation Internet et Java
Option de la directive page : <%@page option %>
•
•
•
•
•
•
import : Identique à l’instruction ‘import’ dans un fichier source java :
import = ‘java.util.*,java.text.*’
buffer : Ajuste la taille mémoire tampon de sortie : soit ‘none’, ou une
certaine taille : buffer=’16k’
contentType : définit la sortie de la page JSP : contentType=‘text/html’
errorPage : page à afficher si une exception est récupérée à partir de cette
page : errorPage=‘fichier’
isErrorPage : cette page s’affiche en réponse aux exceptions issues
d’autres pages. La valeur par défaut est ‘false’: isErrorPage=‘true’
autoFlush : la valeur par défaut est ‘true’. L’exception est levée si l’option
est réglée sur ‘false’ et que la mémoire tampon déborde.
13
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Commandes JSP
l
Programmation Internet et Java
Il existe aussi des actions JSP interprétées à l’exécution de la
page (contraire au éléments de scripts utilisés à la
compilation) : <jsp : action param1="value1" param2="value2" />
•
•
•
•
•
•
Récupération d’un bean dans le request ou la session
• <jsp:useBean id="nom" scope="conteneur" class="tp1servlet.Table" />
Inclusion dynamique d’une page
• <jsp:include page="nompage" flush="true" />
Chaînage vers une autre ressource
• <jsp: forward page="url" /> ou <jsp:forward page="url" >(*)</jsp:forward>
Ajout de paramètres dans le request.(*)
• <jsp:param name="message" value="hello" />
• <jsp:param name="peter" value="<%=peterVal%>" />
Modifications et récupération d’une valeur d’un bean
•
•
<jsp:setProperty name=‘’beanID’’ property=‘’propName’’ value=‘’val’’ />
<jsp:getProperty name=‘’beanID’’ property=‘’propName’’ />
Appel d’un plugin externe
•
<jsp:plugin type=‘’applet’’ code=‘’jweb.samples.SimpeApplet.class’’ />
14
<jsp:plugin type=‘’applet’’ code=‘’jweb.samples.SimpeApplet.class’’ /> est une autre façons
d’inclure une applet dans une page HTML. Le fait de l’écrire coté serveur fait que
le processeur JSP insèrera la balise <applet> adaptée au navigateur.
Nous verrons par la suite plus en détail le fonctionnement de ces actions JSP.
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Utilisation d’objets implicites
Programmation Internet et Java
l L’environnement
donne accès à
certains objets dans les JSP :
•
•
•
•
•
•
•
•
out de type JspWriter : flux de sortie pour écrire la réponse.
request de type HttpServletRequest : requête du client.
response de type HttpServletResponse : réponse renvoyée au
client.
session de type HttpSession : la session en cours pour le client
qui a émis la requête.
config de type ServletConfig : les paramètres d’initialisation de
la servlet en cours de traitement.
pageContext : le contexte de la page JSP
page : l’instance de la page elle même.
exception : l’exception qui a engendré l’appel de la page
15
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Commentaires
l
Programmation Internet et Java
Plusieurs façons d’insérer 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-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Options pour le déploiement de JSP
l
Programmation Internet et Java
On peut aussi déployer une JSP avec une
entrée dans le fichier web.xml :
• Si on désire créer un mapping pour la page
• Passage de paramètres d’initialisation
<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-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
Utilisation conjointe de Servlets et JSP
l
l
l
L’utilisation conjointe de Servlets et JSP
dans une application Web est monnaie
courante.
Les Servlets et JSP ont donc des atouts
différents.
Utiliser tous les atouts possibles impliquera
une utilisation conjointe.
18
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
Utilisation conjointe de Servlets et JSP
l
Rappel :
• L’aspect métier et traitement peut être réservé aux
•
•
•
Servlets.
L’aspect présentation des données peut être
réservé aux JSPs.
Une Servlet doit pouvoir appeler une JSP.
Une JSP doit pouvoir appeler une autre JSP,…
19
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
Utilisation conjointe : Exemple du login
l
Application Login : première approche
1
Login
Login
Demande de
saisie de
l’utilisateur
et de son
password.
3
Re Demande
de saisie de
l’utilisateur
et de son
password
avec erreur.
2
4
Bienvenue
Vous êtes
maintenant
logué en tant
que ‘user’.
Servlet ou JSP
user/password
5
Client Web
Serveur
20
1: La login Servlet génère un HTML avec la demande de Login.
2: Le user/password est envoyé au serveur
3: Login mauvais : renvoie d’une page avec signalement d’erreur et redemande
de Login
4: Le nouveau user/password est envoyé au serveur
5: Login ok. Une page de bienvenue est renvoyée au navigateur.
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
Utilisation conjointe : Exemple du login
l
Problème de l’exemple précédent :
• Complexité de la Servlet :
• Effectue les tests de login.
• Gère la présentation de saisie login
• Gère la présentation de login ok.
• Solution :
• Répartition des tâches.
• Formulaires multiples
21
Jean-Noël Sorenti – Année 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
l’utilisateur
et de son
password.
Login
3
Re Demande
de saisie de
l’utilisateur
et de son
password
avec erreur.
user/password
forwards
5
Bienvenue
Vous êtes
maintenant
logué en tant
que ‘user’.
2 4
Login
ServerPage
5
Client Web
Bienvenue
ServerPage
Serveur
22
On sépare la présentation de l’écran Bienvenue de celle de l’écran Login.
Jean-Noël Sorenti – Année 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
l’utilisateur
et de son
password.
Login
3
Re Demande
de saisie de
l’utilisateur
et de son
password
avec erreur.
Bienvenue
Vous êtes
maintenant
logué en tant
que ‘user’.
5
Client Web
Login
ServerPage
Présentation
forwards
2,4 user/password
1,3
Login Servlet
(Traitements)
Servlet Front
Controller :
gère la logique
applicative
forwards
5
Bienvenue
ServerPage
Serveur
23
Dans ce cas, pour l’action Login, on sépare aussi les traitements de la
présentation.
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
Utilisation conjointe : Répartiteur de requêtes
l
Les ‘forwards’ s’effectuent à l’aide d’un
répartiteur de requêtes de type
RequestDispatcher :
• RequestDispatcher dispatcher =
•
l
request.getRequestDispatcher(’’/next.jsp’’);
dispatcher.forward(request,response)
Dans une page JSP, l’écriture est simplifiée,
on utilise l’action forward :
• <jsp:forward page= ’’/next.jsp’’ />
• <jsp:forward page= ’’<%=url%>’’ />
24
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Répartiteur de requête : forward
l
Programmation Internet et Java
Exemple d’utilisation 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-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Répartiteur de requête : forward
l
Programmation Internet et Java
Restriction dans l’utilisation de forward :
• Aucune sortie ne doit être effectuée en amont ou en
aval d’un forward, on aurais alors une
IllegalStateException générée :
public void service(HttpServletRequest request, HttpServletResponse response) {
PrintWriter out = response.getWriter();
out.println(‘’ce message ne s’affichera 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 s’affichera pas car forward en amont (implique
que le tampon est fermé…’’);
26
La mémoire tampon de out est effacée lors du transfert. (au moment du forward).
La mémoire tampon de out est fermée et vidée lorsque l’on reprend la main.
Le message en amont ne va pas s’afficher car en réalité, il est affiché lors d’un
out.flush() qui est normalement lancé à la fin de la méthode service de la Servlet.
Dans le forward, si le flux out contient de l’information (String en amont), alors
une IllegalStateException est générée.
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Répartiteur de requête : include
l
Programmation Internet et Java
Nous avons include() fonctionnant exactement
comme forward(), sauf que :
• La mémoire tampon n’est pas vidée avant le transfert et
exception n’est levée
• La mémoire tampon n’est pas vidée, ni fermé lorsque l’on
reprend la main .
public void service(HttpServletRequest request, HttpServletResponse response) {
PrintWriter out = response.getWriter();
out.println(‘’ce message s’affichera avant l’inclusion’’);
RequestDispatcher dispatcher = request.getRequestDispatcher(‘’/login.jsp’’);
dispatcher.include(request,response);
}
out.println(‘’Ce message s’affichera après l’inclusion’’);
27
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Répartiteur de requête : include
l
Programmation Internet et Java
Comme pour le forward, l’include peut
s’écrire de façon simplifiée 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
développement d’application Web.Elle
permet de structurer les développement
(factorisation de pages,…)
28
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
Répartiteur de requête : format des documents
l
Le Répartiteur de requête nous permet de
transférer et/ou d’inclure n’importe quel type de
ressources via une URL:
•
•
•
•
l
Une Servlet
Une page JSP
Un fichier HTML
etc.…
Les URL utilisées pour forward() et include() sont
soit :
•
•
Relatives au contexte Web.*
Relative à la Servlet en cours.*
29
Une URL relative au contexte Web débute par ‘/’. On récupère l’information à
partir de la racine de l’application. (webapp,…)
Une URL relative à la Servlet ne commence pas par ‘/’. L’URL pattern du
servlet-mapping est utilisé pour récupérer la ressource.
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Répartiteur de requête nommé
l
Programmation Internet et Java
Le Répartiteur de requête 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-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
Comparaison entre sendRedirect() et forward()
l
l
l
Différent de forward et include ! (Ou toute la
‘chaîne de traitement’ s’effectue 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-Noël Sorenti – Année 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-Noël Sorenti – Année 2002/2003