Académique Documents
Professionnel Documents
Culture Documents
JSP
Java Server Pages (JSP)
6. JSP 6. JSP
Java Server Pages (JSP) Illustration du fonctionnement
• du code Java embarqué dans une page HTML entre les balises <% et %> <HTML> <BODY>
• extension .jsp pour les pages JSP <H1>Table des factorielles</H1>
<%
int i,fact;
• les fichiers .jsp sont stockés sur le serveur (comme des docs) for ( i=1,fact=1 ; i<4 ; i++, fact*=i ) {
• ils sont désignés par une URL http://www.lip6.fr/prog.jsp out.print( i + "! =" + fact + "<BR>" );
• le chargement de l'URL provoque l'exécution de la JSP côté serveur }
%>
</BODY> </HTML>
1 2
Client Serveur Tom prog.jsp invocation
cat !
4 IIS 3 exécution
Explorer
Apache Sun côté serveur
Netscape JVM
... Microsoft
...
<HTML> <BODY> • plusieurs zones <% ... %> peuvent cohabiter dans une même JSP
<H1>Table des factorielles</H1>
<% du code Java • lors du premier chargement d'une JSP (ou après modification), le moteur
int i,fact;
for ( i=1,fact=1 ; i<4 ; i++, fact*=i ) { - rassemble tous les fragments <% ... %> de la JSP dans une classe
résultat = HTML - la compile
out.print( i + "! =" + fact + "<BR>" ); - l'instancie
} généré via l'objet
prédéfini out ! JSP = objet Java présent dans le moteur
%>
</BODY> </HTML>
• puis, ou lors des chargements suivants, le moteur
- exécute le code dans un thread
ce qui est <HTML> <BODY>
renvoyé <H1>Table des factorielles</H1>
1! = 1<BR> ! délai d'attente lors de la 1ère invocation dû à la compilation
au client 2! = 2<BR>
3! = 6<BR> ! en cas d'erreur de syntaxe dans le code Java de la JSP
</BODY> </HTML>
message récupéré dans le navigateur
6. JSP 6. JSP
Directive <%= ... %> Méthodes et variables d'instance
La directive <%= expr %> génère l'affichage d'une valeur de l'expression expr Des méthodes et des variables d'instance peuvent être associées à une JSP
! <%= expr %> raccourci pour <% out.print(expr); %> entre les directives <%! et %>
</BODY> </HTML>
Attention !!
1ère invocation
<%! int cpt = 0; %> ≠ <% int cpt = 0; %>
2ème invocation
6. JSP 6. JSP
La directive <%@ page ... %> Les objets implicites
Donne des informations sur la JSP (non obligatoire, valeurs par défaut) Objets prédéclarés utilisables dans le code Java des JSPs
<%@ page import="..."%> (ex. <%@ page import="java.io.*"%>) out le flux de sortie pour générer le code HTML
les "import" nécessaires au code Java de la JSP request la requête qui a provoqué le chargement de la JSP
response la réponse à la requête de chargement de la JSP
<%@ page errorPage="..."%> (ex. <%@ page errorPage="err.jsp"%>)
fournit l'URL de la JSP à charger en cas d'erreur
page l'instance de servlet associée à la JSP courante (≡ this)
<%@ page contentType="..."%> (ex. <%@ page contentType="text/html"%>) exception l'exception générée en cas d'erreur sur une page
le type MIME du contenu retourné par la JSP
session suivi de session pour un même client
<%@ page isThreadSafe="..." %> trueou false application espace de données partagé entre toutes les JSP
true la JSP peut être exécutée par +sieurs clients à la fois (valeur par défaut)
<%@ page isErrorPage="..." %> true ou false
true la JSP est une page invoquée en cas d'erreur
<HTML> <BODY>
<FORM ACTION="http://..."
METHOD=POST>
Nom <INPUT NAME="nom"> <P>
Prénom <INPUT NAME="prenom"> <P>
<INPUT TYPE=SUBMIT VALUE="Envoi">
<INPUT TYPE=RESET clic
VALUE="Remise à zéro">
</FORM>
</BODY> </HTML>
6. JSP 6. JSP
Gestion des erreurs Exemple de gestion d'erreur
Si hasard = 0
Erreur de syntaxe <HTML> <BODY>
page d'erreur par défaut
- dans les directives JSP (ex. : oubli d'une directive %>) <H1>Pourvu ... !!</H1>
<% int hasard =
- dans le code Java
(int) ( Math.random() * 5 );
%>
Erreur d'exécution du code Java (ex. : NullPointerException) <H1> <%= 12 / hasard %> </H1>
</BODY> </HTML>
! dans tous les cas, erreur récupérée dans le navigateur client
2 possibilités
6. JSP 6. JSP
Inclusion de JSP Délégation de JSP
Résultat Une JSP peut déléger le traitement d'une requête à une autre JSP
! prise en compte complète de la requête par la JSP déléguée
<HTML> <BODY>
<H1>JSP principale</H1> Directives <jsp:forward> et </jsp:forward>
<B>JSP incluse</B>
<P> <HTML> <BODY> Fichier forw.jsp
<%= (int) (Math.random()*5) %> <H1>JSP principale</H1>
</P> <HTML> <BODY>
<jsp:forward <H1>JSP déléguée</H1>
</BODY> </HTML> page="forw.jsp" >
</jsp:forward> <P>
URL <%= (int) (Math.random()*5) %>
Ignoré !! </P>
Remarque </BODY> </HTML>
</BODY> </HTML>
1. directives <jsp:include> et </jsp:include> inclusion statique
2. directive <%@ page include file="…"%> inclusion dynamique <HTML> <BODY>
<P>
<%= (int) (Math.random()*5) %>
<HTML> <BODY>
</P>
<H1>JSP principale</H1>
</BODY> </HTML>
<jsp:forward page="forw.jsp">
<jsp:param name="nom" value="Seinturier" />
<jsp:param name="prenom" value="Lionel" />
</jsp:forward>
</BODY> </HTML>
6. JSP 6. JSP
Délégation et inclusion de JSP Compléments sur l'API
• HTTP protocole non connecté Méthodes appelables sur l'objet prédéfini session
• pour le serveur, 2 requêtes successives d'un même client sont indépendantes - void setAttribute( String name, Object value )
ajoute un couple (name, value) pour cette session
Objectif : être capable de "suivre" l'activité du client sur +sieurs pages - Object getAttribute( String name )
retourne l'objet associé à la clé name ou null
Notion de session
- void removeAttribute( String name )
! les requêtes provenant d'un utilisateur sont associées à une même session enlève le couple de clé name
! les sessions ne sont pas éternelles, elles expirent au bout d'un délai fixé - java.util.Enumeration getAttributeNames()
retourne tous les noms d'attributs associés à la session
Objet prédéfini session de type HttpSession
- void setMaxIntervalTime( int seconds )
! la session courante ou une nouvelle session spécifie la durée de vie maximum d'une session
- long getCreationTime() / long getLastAccessedTime()
retourne la date de création / de dernier accès de la session
en ms depuis le 1/1/1970, 00h00 GMT → new Date(long)
Web 158 Lionel Seinturier Web 159 Lionel Seinturier
6. JSP 6. JSP
Partage de données entre JSP Conclusion
Notion de contexte d'exécution Permettent d'étendre le comportement des serveurs Web avec des prog. Java
= ensemble de couples (name, value) partagées par toutes les JSP instanciées
Résumé des fonctionnalités
! objet prédéfini application
+ code embarqué dans un fichier HTML
Méthodes appelables sur l'objet prédéfini application
- void setAttribute( String name, Object value ) + portabilité, facilité d'écriture (Java)
ajoute un couple (name, value) dans le contexte + gestion des applications requièrant un suivi entre plusieurs programmes
- Object getAttribute( String name ) (persistance des données)
retourne l'objet associé à la clé name ou null
- void removeAttribute( String name ) + JSP chargée et instanciée une seule fois
enlève le couple de clé name + JSP exécutée avec des processus légers (threads)
- java.util.Enumeration getAttributeNames()
retourne tous les noms d'attributs associés au contexte
6. JSP
Tomcat
Répertoire webapps\ROOT