Une page JSP peut être séparée en plusieurs parties :
- les données statiques comme le HTML,
- les directives,
- les scripts et variables,
- les actions,
- les balises personnalisées.
Données statiques
Les données statiques sont écrites dans la réponse HTTP exactement comme elles apparaissent dans le fichier source. Un fichier JSP sans code Java et sans action est donc un fichier valide. Dans ce cas, les mêmes données sont envoyées à chaque fois que la page est demandée par le serveur HTTP. Bien sûr, l’intérêt des JSP est d'insérer des données dynamiques à l’intérieur de ce contenu statique.
Directives JSP
Les directives contrôlent la manière dont le compilateur doit générer la servlet. Elles sont placées entre les symboles <%@ et %>, ou par les balises XML de la forme <jsp:directive.nom_directive … /> en JSP 2.0. Les directives suivantes sont disponibles :
| Directive | Description et exemple d'utilisation |
|---|
| include | Cette directive indique au compilateur d’inclure un autre fichier dans la page. C’est comme si le contenu du fichier à inclure était directement copié dans le fichier courant. Cette fonctionnalité est similaire à celle offerte par le préprocesseur C.
<%@ include file="unAutreFichier" %>
ou en JSP 2.0
<jsp:directive.include file="unAutreFichier" /> |
| page | Il y a plusieurs options à cette directive :
import
Importe un paquetage (package) Java. Cette directive résulte en une instruction import dans la servlet.
contentType
Définit le type de contenu de la page générée. Par exemple, ce peut être text/html pour du HTML.
errorPage
Indique la page à afficher si une exception se produit pendant le traitement de la requête HTTP.
isErrorPage
Si cette valeur est à true, la page est une page d'erreur.
isThreadSafe
Indique si la servlet résultante est protégée pour les threads (fils d’exécution).
<%@ page import="java.util.*" %> // import <%@ page contentType="text/html" %> // contentType <%@ page isErrorPage=false %> // pas une page d'erreur <%@ page isThreadSafe=true %> //JSP sécuritaire aux threads
ou en JSP 2.0
<jsp:directive.page import="java.util.*" />// import <jsp:directive.page contentType="text/html" isErrorPage="false" isThreadSafe="true" /> |
| taglib | Directive qui indique qu’une bibliothèque de balises doit être utilisée. Elle requiert qu’un préfixe soit utilisé (comme un namespace en C++) et l’URI de la description de la bibliothèque.
<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>
ou en JSP 2.0
<jsp:root xmlns:myprefix="urn://to/taglib" …></jsp:root> |
Éléments de scripts JSP et variables
Variables de script standard
Les variables suivantes sont toujours disponibles dans une page JSP :
out
Le JSPWriter utilisé pour envoyer la réponse HTTP au client.
page
La servlet elle-même.
pageContext
Une instance PageContext qui contient les données associées à la page entière. Une page HTML donnée peut être passée entre plusieurs JSP.
request
Objet représentant la requête HTTP.
response
Objet représentant la réponse HTTP.
session
La session HTTP, qui peut être utilisée pour conserver de l'information à propos d'un utilisateur d'une requête à une autre.
Éléments de script
Il y a 3 types basiques d'éléments qui permettent d'insérer du code Java dans la servlet.
| Élément | Description et exemple |
|---|
| Déclaration (!) | Une déclaration permet d'insérer du code directement dans la classe de la servlet. Elle peut être utilisée pour définir une variable globale à la classe ou pour créer des méthodes Java.
<%! int variableDeClasse = 0; %>
Ou
jsp:declaration int variableDeClasse = 0; </jsp:declaration> |
| Scriptlet | Un Scriptlet est utilisé pour placer du code dans la méthode _jspService() de la Servlet. C'est généralement l'élément utilisé pour placer tout code Java, sauf les méthodes et les variables de classe.
<% int variable = 0; out.println("On peut aussi écrire des variables : " + variable); %>
Ou
jsp:scriptlet int variable = 0; out.println("On peut aussi écrire des variables : " + variable); </jsp:scriptlet> |
| Expression (=) | Cet élément sert à afficher une expression. Ce code est donc ajouté à la méthode _jspService(), comme paramètre à un appel out.print().
Voici une variable : <%= variable %>
Ou
Voici une variable : jsp:expression variable </jsp:expression> |
| Commentaire (--) | Utilisé pour faire un commentaire dans le code JSP. Le texte dans un commentaire JSP ne sera pas envoyé au client ni compilé dans la servlet.
<%-- Voici un commentaire JSP --%> |
Actions JSP
Les actions JSP sont des balises XML qui appellent des fonctions sur serveur HTTP. Les actions suivantes sont disponibles :
| Action | Description et exemple |
|---|
| jsp:include | Agit de façon similaire à l'appel d'une sous-routine. Le contrôle est temporairement donné à une autre page, soit un autre fichier JSP, soit un fichier statique. Après le traitement de l'autre page, le contrôle est redonné à la JSP en cours d'exécution. En utilisant cette fonctionnalité, le code Java peut être partagé entre deux pages plutôt que dupliqué.
<jsp:include page="pageÀInclure.jsp" > <jsp:param name="paramètre" value="valeur" /> </jsp:include> |
| jsp:param | Peut être utilisé dans un bloc jsp:include, jsp:forward ou jsp:params. Il indique un paramètre à être ajouté aux paramètres actuels de la requête. Pour un exemple, voir celui de jsp:include et jsp:forward. |
| jsp:forward | Donne le contrôle de la requête et de la réponse à une autre page JSP ou à une servlet. Le contrôle est définitivement donné. Pour être appelée, aucune écriture ne doit avoir eu lieu sur la sortie (out) de la servlet.
<jsp:forward page="pagePrenantContrôle.jsp" > <jsp:param name="paramètre" value="valeur" /> </jsp:forward> |
| jsp:plugin | Les versions plus vieilles de Netscape et de Internet Explorer utilisaient différents types de balises pour ajouter une applet. Cette action génère le code nécessaire pour le navigateur utilisé par le client.
<jsp:plugin type="applet" height="100%" width="100%" codebase="/applets" code="MonApplet" > jsp:params <jsp:param name="enableDebug" value="true" /> </jsp:params> jsp:fallback Votre navigateur ne supporte pas les applets Java. </jsp:fallback> </jsp:plugin> |
| jsp:fallback | Le contenu à montrer si le client ne supporte pas l'affichage d'applet (utilisé avec jsp:plugin). Pour un exemple, voir celui de jsp:plugin. |
| jsp:getProperty | Retrouve la valeur d'une propriété provenant d'un Java bean.
<jsp:getProperty name="nomDeBean" property="derniereModif" /> |
| jsp:setProperty | Règle la valeur d'une propriété d'un Java bean.
<jsp:setProperty name="nomDeBean" property="derniereModif" value="<%= new Date()%>" /> |
| jsp:useBean | Crée ou réutilise un Java bean déjà existant pour pouvoir l'utiliser dans la page.
<jsp:useBean id="nomDeBean" class="package.Bean" scope="request" /> |
Bibliothèques de balises JSP
En plus des actions JSP pré-définies, les développeurs peuvent ajouter leurs propres actions personnalisées en utilisant l'API d'extension de balises JSP (JSP Tag Extension API). Pour ce faire, il faut écrire une classe Java qui implémente une des interfaces de balises et écrire le fichier XML de description de balise qui donne les caractéristiques du marqueur et les classes qui l'implémentent.