Technologies internet


JSP


Voir:

Au lieu d'embarquer du code HTML dans les servlets Java, on part du HTML statique et on ajoute des balises spéciales qui sont interprétées par le moteur JSP, produisant ainsi une page web dynamique.

Introduction

Principes de base des JSP

Serveur Web

Parmi les serveurs HTTP gratuits qui supportent les JSP, on trouve

Les deux sont téléchargeables à l'adresse java.sun.com/products/jsp/download.html.

Traitement

L'interprétation d'une page contenant des instructions JSP se fait de la manière suivante. Lorsqu'un utilisateur demande, via son navigateur (ou "client"), un document possédant l'extension .jsp :

  1. Le serveur HTTP lance une servlet (application Java serveur) qui construit le code Java à partir du code contenu dans la page HTML.
  2. Le programme résultant est compilé à la volée puis exécuté sur le serveur.
  3. Le résultat est réintroduit dans la page renvoyée au client.

Regardons le traitement d'un fichier JSP sur le site de Wikipedia.

De ce fait, utiliser des JSP reste un processus lourd et gourmand en ressources système. Il faut donc veiller à ne pas "embarquer" trop de code Java dans une page HTML. Il est préférable d'utiliser des composants séparés et déjà compilés.

Installer et configurer Tomcat

Tomcat est un serveur HTTP gratuit supportant les JSP version 1.1 et les servlets version 2.2. C'est un bon moyen de créer son site et surtout de tester les exemples présentés par la suite.

Installation

Configuration

La configuration de Tomcat est des plus simple : les principaux paramètres se trouvent dans le fichier conf/server.xml.
Pour faire fonctionner les premiers exemples, il suffit de rajouter un élément Context. Le paramètre path détermine le nom de l'application, et docBase pointe sur le répertoire qui contient le site.

<Context path="/App" docBase="c:\monSite" debug="0" reloadable="true">
</Context>
Pour faire des tests et visualiser vos premières pages, il faut accéder au site via l'adresse http://localhost:8080/App.

Pour que les JSP fonctionnent correctement, il faut bien penser à configurer les variables d'environnement nécessaires au bon fonctionnement de Java, à savoir :

Attention : toutes les pages contenant des instructions JSP doivent avoir l'extension .jsp, sans quoi ces instructions seront ignorées.

Premiers scripts

1. Afficher le résultat d'une expression élémentaire

L'exemple ci-après montre la différence entre ce qui est statique (les instructions HTML en noir) et ce qui est dynamique (le code JSP en rouge). Le traitement applicatif – ici, l'addition – est effectué par la machine où le serveur HTTP s'exécute.

<html>
<body>
<h4>
  2+2 = <%=2+2%>
</h4>
</body>
</html>

Vous venez d'apprendre vos deux premiers éléments de syntaxe JSP :

Résultat de cette page sur un navigateur :

2+2 = 4

2. Effectuer un traitement en boucle

On peut réaliser des traitements plus complexes qu'une expression élémentaire, tels que les boucles. On peut aussi "découper" sans problème les instructions JSP, à condition de répéter les balises <% et %>.
Dans cet exemple, le saut de ligne <br> est une instruction HTML insérée dans la boucle Java for(...){...}.
Note : ici, c'est l'instruction println qui permet d'afficher le résultat dans la page Web.

<html>
<body>
<%
for (int i=0; i<3; i++)
{
out.println("i = " + i);
%>
<BR>
<%
}
%>
</body>
</html>

Résultat :

i = 0
i = 1
i = 2

Syntaxe JSP

Pour que le code Java soit correctement interprété, il doit être systématiquement encadré par des balises JSP. Certaines d'entre elles possèdent deux syntaxes différentes :

Voici une liste non exhaustive des instructions le plus couramment utilisées.

Instruction JSP Utilité Syntaxe réduite Syntaxe XML
Expression Evalue une expression et affiche le résultat. <%= expression %> <jsp:expression>
expression
</jsp:expression>
Scriplet Evalue le code java. <% code %> <jsp:scriptlet>
code
</jsp:scriptlet>
Déclaration Permet de déclarer des variables utilisées par la suite. <%! déclaration %> <jsp:declaration>
déclaration
</jsp:declaration>
Directive Permet de déclarer les directives communes à la page (par exemple, l'importation des paquetages utilisés). <%@ directive %> <jsp:directive.page att="val"/>
Commentaire Texte de commentaire (ignoré par le serveur). <%-- comment --%>  
Utilisation des JavaBeans Déclaration d'un bean et utilisation de ses propriétés.   <jsp:useBean att="val"/>

<jsp:setProperty att="val*"/>

<jsp:getProperty name="nomPropriété" value="valeur"/>

Les JavaBeans

Les JavaBeans

Définition

On a dit que l'un des avantages de JSP était de séparer la présentation (le code HTML) de la logique applicative (le code JSP). Or, dans les exemples précédents, les deux parties restaient imbriquées.
A l'usage, on se rend vite compte que l'insertion directe de code Java dans les pages HTML devient trop complexe à gérer. De plus, le temps nécessaire à la compilation du code est rapidement prohibitif. La solution qui permet de faciliter le développement et la maintenance consiste à utiliser des composants JavaBeans.

Les JavaBeans (ou beans) sont des objets compilés en Java qui peuvent être instanciés dans un programme quelconque. L'interface d'un tel objet (c'est-à-dire les services utilisables) est constituée par ses méthodes publiques. Un JavaBean peut aussi avoir des propriétés, qui sont accédées via les méthodes getNomPropriété, setNomPropriété.

Grâce à cette technologie et aux instructions JSP associées, il est plus judicieux de créer des pages JSP très simples, qui se contentent d'accéder à des objets codés à part. Ces objets sont utilisés pour encapsuler les traitements.

Les JavaBeans - exemple

Dans l'exemple présenté ci-après, on construit un objet JavaBeans nommé DataBaseAccess et contenant des données nécessaires à l'application. Il possède deux propriétés – baseName et baseSize – et des méthodes permettant d'accéder aux données.
La page en JSP se contente d'afficher les données contenues dans le JavaBean.

Le code du JavaBean est très simple :

  public class DataBaseAccess {
    private String m_strBase   = "Base";
    private int    m_nBaseSize = 3;
    private String m_dataBase[];

    public DataBaseAccess() {
      // on crée une base de données fictive
      // dans le constructeur
      m_dataBase = new String[m_nBaseSize];
      for (int i=0; i<m_nBaseSize; i++){
        m_dataBase[i] = "Nom" + i;
      }
    }

    // on permet d'accéder aux propriétés
    public void setBaseName(String strName)
      { m_strBase = strName; }
    public String getBaseName()
      { return m_strBase; }
    public int getBaseSize()
      { return m_nBaseSize; }

    // on permet d'accéder aux éléments
    public String element(int nIndex)
      { return m_dataBase[nIndex]; }
  }
Le code JSP qui suit utilise à peu près toutes les commandes présentées précédemment.
On commence par créer une instance du JavaBean DataBaseAccess, que l'on nomme Base. Ensuite, on définit sa propriété baseName, dont la valeur est affichée juste après. Enfin, on présente tous les éléments de l'objet.

<HTML>
<BODY>

<%@ page language="java"%>
<jsp:useBean id="Base" class="DataBaseAccess" scope="page"/>
<jsp:setProperty name="Base" property="baseName" value="Test"/>


Présentation de la base
<B><jsp:getProperty name="Base" property="baseName"/></B> :<BR>
<font color="#0000FF">

<% for (int i=0; i<Base.getBaseSize(); i++)
{
%>
  <%= Base.element(i) %>
<BR>
<% } %>

</font>
</BODY>
</HTML>
Notes :

Résultat :

Présentation de la base Test :
Nom0
Nom1
Nom2
En situation réelle, un tel objet pourrait servir à se connecter à une vraie base de données, et proposerait une série de services permettant de faire des requêtes en lecture ou en écriture.