3. JSP scriplet

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.

3.1. Les expressions

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.

3.2. Les déclarations

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.

Exemple 42. Scriplet de déclaration

<%!  // déclaration d'une variable 
     private String blm =  "Bonjour le monde" ;%>
...
<%!  // déclaration d'une méthode 
     private  void setBlm (String s) {
       blm = s ;
	  } %>
...
<%= blm %>

3.3. Variables prédéfinies

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.

3.4. Scriplet de directives

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.

Exemple 43. Scriplet de directive

<@% directive attribut1="valeur1"
              attribut2="valeur2" %>

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

Exemple 45. Utilisation d'une directive include

<%@include file="copyright.html" %>

Nous verrons la dernière directive, taglib dans la suite de ce document
Java servlet et JSP
Retour au blog Java le soir
Cours & Tutoriaux
Table des matières
Introduction
1. Position de l'API Servlet
2. Présentation
Présentation de Tomcat
1. Un peu d'histoire
2. Organisation des répertoires de Tomcat
2.1. Répertoire bin
2.2. Répertoire conf
2.3. Répertoire lib
2.4. Répertoire log
2.5. Répertoire temp
2.6. Répertoire webapp
2.7. Répertoire work
3. Lancement de Tomcat
3.1. Lancement par défaut
3.2. Accéder à l'administration de Tomcat
3.3. Plusieurs instances de Tomcat
4. Configuration de Tomcat
4.1. Introduction
4.2. Élément Server
4.3. Élément Service
4.4. Élément Connector
4.5. Élément Engine
4.6. Élément Host
4.7. Élément Context
4.8. Élément GlobalNamingResources
4.9. Élément Realm
4.10. Élément Valve
5. Définition et chargement des applications web
5.1. Introduction
5.2. Prise en compte des éléments Context
5.3. Chargement et mise à jour à chaud
6. Utilisation de Tomcat avec Apache
API Servlet
1. Introduction
2. Une première servlet
2.1. Le code
2.2. Création de l'application web
2.3. Déploiement dans Tomcat
3. Concepts, cycle de vie
3.1. Requête
3.2. Réponse
3.3. Session
3.4. Application web
3.5. Contexte d'exécution
3.6. Cycle de vie
3.7. Filtre
4. Présentation générale de l'API
4.1. Introduction
4.2. Interfaces disponibles
5. Notion de servlet
5.1. Interfaces servlet
5.2. Cycle de vie d'une servlet
5.3. Paramètres d'initialisation d'une servlet
6. Notion de requête
6.1. Accès aux paramètres d'une requête
6.2. Accès aux éléments de l'en-tête HTTP
6.3. Accès aux éléments de l'URL
6.4. Accès aux paramètres du client
6.5. Accès aux informations de sécurité
6.6. Accès à la session, au contexte et aux informations d'initialisation
7. Notion de réponse
7.1. Contrôle du buffer de sortie
7.2. Contrôle de la réponse HTTP
8. Notion de session HTTP
9. Redirection ou inclusion d'une ressource
10. Listeners
10.1. Introduction
10.2. Événements de l'API Servlet
10.3. Ajout ou retrait d'un attribut
10.4. Création et destruction d'un contexte
10.5. Notification d'un objet attaché à un contexte
10.6. Déclaration d'un listener dans une application web
11. Connexion à une base
11.1. Introduction
11.2. Connexion manuelle
11.3. Connexion par utilisation de source de données
Filtrage
1. Filtrage de servlets
2. Mise en place d'un filtre
2.1. Écriture d'un filtre
2.2. Déclaration du filtrage
3. Filtrage d'une requête
4. Filtrage d'une réponse
4.1. Fonctionnement de ce filtrage
Java Server Pages
1. Introduction
2. Un premier exemple
2.1. Une première JSP statique
2.2. Une première JSP dynamique
2.3. Fonctionnement interne des JSP
3. JSP scriplet
3.1. Les expressions
3.2. Les déclarations
3.3. Variables prédéfinies
3.4. Scriplet de directives
4. Utilisation de beans
4.1. Introduction
4.2. Déclaration d'un bean existant
4.3. Création d'un nouveau bean
4.4. Utilisation des propriétés d'un bean
5. Inclure un contenu externe dans une JSP
5.1. Introduction
5.2. Inclusion au lancement de l'application
5.3. Inclusion au traitement de la requête
6. Utilisation de bibliothèques de tags
6.1. Introduction
6.2. Bibliothèque core
7. Internationalisation
7.1. Notion de bundle
7.2. Internationalisation de pages JSP
Projet exemple
1. Présentation du projet