Ces éléments de Java que l'on place entre ces tags particuliers forment ce que l'on appelle des scriplets. La première version des JSP exposaient cette fonctionnalité, qui a permis de construire nombre de sites web. Voyons les différents types de scriplets disponibles.
Nous avons déjà utilisé une expression dans notre premier exemple. Une expression est écrite
entre les tags <%=
et %>
. Elle est passée en argument de la
méthode out.print()
dans la méthode _jspService()
de la servlet
générée par Tomcat. Typiquement, Tomcat affiche le retour de la méthode toString()
de cet objet sur la page HTML.
Une déclaration est écrite entre les tags <%!
et %>
.
Tout ce qui se trouve entre ces tags est placé à l’extérieur de toute méthode, dans la
classe générée. On peut donc entre autre déclarer des variables ou des méthodes par ce biais.
Voyons ceci sur deux exemples.
Quelques variables sont prédéfinies dans une page JSP, et peuvent donc être utilisées sans déclaration.
request
: contient une référence sur l’objet de type HttpServletRequest
qui contient la requête à cette page. Les en-têtes HTTP sont disponibles au travers de cet objet.
response
: référence sur le flux sortant de la servlet. Une JSP ne touche en
général pas explicitement au flux sortant. Il est possible de modifier les en-tête HTTP
via cet objet, y compris dans le corps de la page. On veillera toutefois à ne faire de
telles modifications que si le buffer de sortie n’a pas déjà été vidé vers le client,
même partiellement. Si tel était le cas, les modifications de l’en-tête ne seraient pas
prises en compte.
out
: cette variable est de type Writer
. C’est celle qui sert
à envoyer les données vers le client. C’est une instance de la classe JspWriter
,
un Writer
qui permet de modifier de façon dynamique la taille du buffer associé.
config
: il s’agit de la variable de type ServletConfig
utilisée pour
initialiser la page.
pageContext
: objet de type PageContext
. Cette classe abstraite se
trouve dans le package javax.servlet.jsp
. Elle contient des méthodes qui
permettent d’accéder à toutes les variables déclarées par défaut. Si l’on a besoin de
passer toutes ces variables à une méthode, il est donc efficace de lui passer
pageContext
à la place.
session
: variable de type Httpession
. On peut donc lui attacher des objets,
puisqu’une JSP est une servlet. Cette variable représente la session dans laquelle se trouve
la requête.
application
: variable de type ServletContext
, à laquelle on peut aussi
attacher des objets. Cette variable modélise l'application web dans laquelle on se trouve.
page
: variable qui modèlise la page dans laquelle on se trouve. Elle contient
une référence sur this
.
Une directive est une déclaration qui donne une valeur à un attribut prédéfini. Cet attribut est ensuite utilisé pour créer la servlet associée à cette page. La syntaxe d’une directive est la suivante.
Dans ce tag, directive
peut prendre trois valeurs : page
, include
et taglib
. Suivant la valeur prise, certains attributs peuvent être ajoutés ou non.
La directive page
peut prendre douze attributs différents.
import
: cet attribut précise les packages ou les classes à importer pour la
servlet qui sera générée.
language
: cet attribut précise dans quel langage de programmation la page
est écrite. En fait, seule la valeur java
est supportée
contentType
: indique quel est le type MIME de la page générée. La valeur
peut être n’importe quel type MIME valide.
isThreadSafe
: cet attribut permet de générer une méthode _jspService()
qui ne pourra être appelée que par un seul thread à la fois. Les valeurs prises sont
true
et false
. La valeur par défaut est false
.
session
: contrôle le fait qu’un objet de type HttpSession
va
être associé à cette page ou non. Les valeurs possibles sont true
et
false
, qui est la valeur par défaut. Une bonne habitude est de le mettre
à false
si l’on n’a pas besoin d’accéder à la session courante dans cette page.
buffer
: spécifie la taille du buffer de sortie associé à la variable
out
. Les valeurs prises sont none
ou xxkb
,
où xx
est un nombre.
autoflush
: contrôle si le buffer doit être envoyé automatiquement au client ou pas.
S’il devient plein, une exception sera jetée. Les valeurs acceptées sont true
ou
false
, qui est la valeur par défaut. La valeur false
est interdite
si l’attribut buffer
a été mis à none
.
extends
: utilisé par les équipes qui développent
des serveurs comme Tomcat. Le développeur de servlet n’a pas à l’utiliser.
info
: fixe la valeur de la chaîne de caractères renvoyée par la méthode
getServletInfo()
.
errorPage
: contient un lien vers une page JSP qui sera appelée pour traiter
toute exception jetée mais non captée. Cette page d’erreur doit obligatoirement
posséder l’attribut isErrorPage
, positionné à true
.
isErrorPage
: indique si la page courante est une page d’erreur ou pas.
Si tel est le cas, une variable supplémentaire est disponible dans la méthode
_jspService()
: exception
. Cette variable contient une
référence sur l’exception qui a généré l’appel à cette page.
pageEncoding
: définit le codage de caractères qui doit être utilisé sur
la page. La valeur par défaut est ISO-8859-1.
Voyons un exemple d'utilisation d'une telle directive.
Exemple 5.9. Utilisation d'une directive page
<%@page contentType="text/html" pageEncoding="UTF-8" import="java.util.List"%>
La directive include
permet d'insérer du contenu statique (HTML pur) ou dynamique
(scriplets ou éléments JSP) au moment de la compilation de la servlet. Elle ne peut prendre
qu'un seul attribut, file
, qui pointe vers la ressource à inclure.
Voyons un exemple.
Nous verrons la dernière directive, taglib
dans la suite de ce document