4. Utilisation de beans

4.1. Introduction

Afin de simplifier l'utilisation des scriptlets, l'API JSP introduit la notion de bean attaché à une page. Un bean attaché à une page se comporte comme une variable que l'on peut utiliser en tout endroit de cette page. Ce bean est attaché à un contexte, qui peut être la page, la requête, la session ou l'application. Enfin ce bean peut être un bean existant, ou créé dans le cadre même de la page. Rappelons qu'un bean est un objet Java simple, qui doit posséder les propriétés suivantes :
  • il doit implémenter Serializable ;
  • il doit posséder un constructeur vide, soit celui qui existe par défaut, soit déclaré explicitement ;
  • il doit exposer des propriétés, sous forme de paires getters / setters .

4.2. Déclaration d'un bean existant

Un bean est déclaré en utilisant le tag <jsp:userBean>. Cette déclaration permet d'associer un nom à un bean. Ce nom peut être ensuite utilisé dans la page, comme s'il s'agissait d'un champ normal.

Exemple 46. Déclaration d'un bean dans une page

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC  "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<jsp:useBean id="marin" beanName="marin" scope="request" 
             type="org.paumard.cours.model.Marin"/>

<html>
   <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <p>Using <%=marin%> ; </p>
    </body>
</html>

La déclaration précédente comporte plusieurs éléments, sous forme d'attributs XML :
  • id : désigne le nom du champ qui porte la référence à ce bean. Ici marin.
  • beanName : la présence de cet attribut indique que l'on utilise un bean qui a été créé par ailleurs. Ce bean doit se trouver sur l'un des contextes définis dans l'API servlet : la page, la requête, la session ou l'application. La valeur de cet attribut donne la clé à laquelle ce bean a été associé, par invocation d'une méthode setAttribute(beanName, ...).
  • scope : attribut qui indique le contexte dans lequel le bean existe. Cet attribut peut prendre les valeurs page, request, session ou application. Dans le cas d'un bean existant, ce contexte doit obligatoirement être précisé. Le moteur de JSP ira chercher ce bean dans le contexte indiqué, par invocation d'une méthode getAttribute().
  • type : cet attribut indique la classe du bean déclaré. Cette classe doit bien sûr être connue de l'application Web. Dans notre exemple, on affiche simplement ce bean dans la page. Sa méthode toString() sera automatiquement appelée.
Une fois ce bean déclaré, il peut être utilisé le corps de la page JSP, comme indiqué sur l'exemple.

4.3. Création d'un nouveau bean

La création d'un nouveau bean suit un processus légèrement différent. Tout d'abord, on ne déclare pas l'attribut beanName, qui indique que le bean doit exister dans un contexte donné par l'attribut scope. Ensuite, plutôt que d'indiquer la classe de ce bean dans l'attribut type, on le déclare dans l'attribut class. Dans ce cas, le moteur de JSP crée ce bean, et le range en tant qu'attribut du contexte indiqué dans l'attribut scope. On peut enfin préciser les valeurs des propriétés de ce bean de ceux façons :
  • explicitement, en utilisant une valeur dans l'attribut value de l'élément setProperty ;
  • en l'associant à une valeur présente dans les paramètres de la requête, en utilisant l'attribut param de l'élément setProperty.
Voyons tout ceci sur un exemple.

Exemple 47. Création d'un bean dans une page

<jsp:useBean id="marin" scope="page"  class="org.paumard.cours.model.Marin">
    <jsp:setProperty name="marin" property="nom"    value="Surcouf"/>
    <jsp:setProperty name="marin" property="prenom" param="prenom"/>
    <jsp:setProperty name="marin" property="age"    param="age"/>
</jsp:useBean>

Dans ce deuxième exemple, on crée un bean de type Marin, et on l'associe au nom de champ marin. Le contexte de ce bean est la page, il ne sera donc pas disponible ailleurs que dans cette page. En particulier, si cette page fait appel à d'autres pages, ou à d'autres servlets, ces autres éléments n'auront pas accès à ce bean. Les trois propriétés nom, prenom et age de ce bean sont fixées par les sous-éléments setProperty. Ces sous-élements prennent en attribut :
  • name : le nom du bean, tel que déclaré dans l'attribut id de l'élément useBean.
  • property : le nom de la propriété que l'on fixe. Il doit exister un setter associé.
  • value : si cet attribut est précisé, alors la propriété prendra la valeur indiquée.
  • param : si cet attribut est utilisé, alors la propriété prendra la valeur du paramètre de la requête donc le nom est indiqué. Cela permet de créer directement un pont entre les paramètres présents sur la requête et les propriétés d'un bean.

4.4. Utilisation des propriétés d'un bean

Jusqu'à présent nous avons utilisé des éléments de scripts entre les tags JSP particuliers <%= et >. On peut utiliser une syntaxe plus légère, comme dans l'exemple suivant.

Exemple 48. Lecture d'une propriété

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC  "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<jsp:useBean id="marin" beanName="marin" scope="session" 
             type="org.paumard.cours.model.Marin"/>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <p>Nom = ${marin.nom}</p>
    </body>
</html>

Cette syntaxe consiste à référencer un bean par son nom dans la page (valeur de l'attribut id de l'élément useBean qui a servi à le déclarer), et à indiquer la propriété que l'on veut exploiter en utilisant le séparateur .. Le tout doit être mis entre accolades, et précédé par le caractère $. Dans ce cas, la propriété sera affichée dans la page. Si elle est non nulle, alors le moteur de JSP utilisera sa méthode toString().
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