TUTORIELS 
Java Server Pages et JavaBeans
Découvrir comment combiner contenus statique et dynamique avec les JSP et comment écrire des composants réutilisables, les JavaBeans.  (11 mai 2001)
 

La technologie Java Server Pages (JSP) permet la réalisation de sites web combinant contenu statique et contenu dynamique. Elle désigne des pages comprenant à la fois du code HTML et des scripts "côté-serveur" programmés en code Java. Les fichiers JSP sont compilés, et le résultat de leur compilation réside en mémoire du serveur d'application sous forme de servlets. Les servlets se comparent aux scripts CGI, avec la distinction fondamentale suivante: les servlets sont des programmes compilés au préalable (alors que les scripts CGI sont interprétés), ce qui réduit le temps entre une requête et la réponse du serveur HTTP. Les servlets produisent des pages web qui sont transmises au navigateur d'où provient la requête.

La technologie JSP suggère fortement, mais ne requiert pas, l'utilisation des JavaBeans, que l'on peut décrire comme des composants réutilisables, multi-plates-formes (c'est le crédo du langage Java), et résidant sur le serveur d'application. Les servlets peuvent faire appel à des JavaBeans pour traiter les informations qui leur sont transmises par la requête du client. Les JavaBeans, à leur tour, peuvent faire appel à tout autre service dit de "back-end", comme des bases de données ou des Enterprise JavaBeans (EJB). Notons que la requête est envoyée à la page JSP la première fois (celle-ci est alors compilée), directement au servlet ensuite (sauf si la page JSP a été modifiée). Notons également que l'on peut envoyer la requête à un servlet faisant appel à un JavaBean, et renvoyer le contenu dynamique sous forme de JavaBean à l'aide d'un autre servlet, celui-ci issu de la compilation d'une page JSP (JSP servlet).

JSP servlets et Java servlets
Les servlets sont des composants Java qui tournent sur une Java Virtual Machine (JVM), et l'on peut préciser qu'un servlet est issu de la compilation d'une page JSP en le désignant par l'appellation JSP servlet. De nouvelles balises, les balises JSP, contiennent les instructions de programmation qui, compilées, donneront naissance aux JSP servlet. Un avantage immédiat de cette approche est bien sûr la sécurité. Par ailleurs, les servlets bénéficient de l'existence d'API (Application Programme Interface) qui assurent le développement rapide d'applications (Java) vers des services dit de "back-end" (bases de données relationnelles, courtiers de messages, etc.). Enfin, les servlets ont l'avantage de la portabilité, selon le principe: "N'écrivez qu'une fois, faites tourner partout (Write Once, Run Anywhere).

Composants JavaBeans
Un des arguments en faveur de l'utilisation des JavaBeans avec des servlets est la séparation du code (proprement dit, c'est-à-dire l'aspect algorithmique) de la présentation. En utilisant ces composants réutilisables, on minimise la quantité de code qui figurera sur la page JSP, qui, idéalement, ne contiennet que les balises pour l'accès au contenu et le rendu (présentation) du contenu.
Un JavaBean se caractérise par des propriétés, des méthodes, et des événements associés. Un événement est la notification au JavaBean que quelque chose est survenu et doit donner lieu à un traitement; une méthode est une action ou un service réalisé par le JavaBean; les propriétés, enfin, sont définies par une paire de méthodes, une méthode "d'obtention" (getter) et une méthode de "réglage" (setter). Ainsi, dans l'exemple suivant:

public Date getTime()
public void setTime(Date newTime)

La propriété Date est définie par le couple de méthode getTime() (méthode d'obtention), et setTime(Date newTime) (méthode de réglage). Ici, la propriété Date est une propriété modifiable par l'utilisateur: la méthode de réglage fait donc elle-même logiquement appel à Date. On le voit, les JavaBeans représentent la logique applicative dont les méthodes exposent les services. Un servlet utilise la logique applicative encapsulée dans un ou plusieurs JavaBeans, et le contenu dynamique résultant, stocké lui-même dans un JavaBean, est récupéré par une page JSP pour répondre à la requête initiale. Une balise spécifique permet d'accéder au JavaBean résultant.

Syntaxe des balises JSP
Les pages JSP portent l'extension .jsp. Nous avons dit qu'elles étaient compilées sous forme de servlets, et présentent donc des balises spécifiques permettant de manipuler du code Java. Ces balises définissent des directives, des déclarations, des scriptlets et des expressions.

Commençons par un exemple de directives:

<% @ method="doPost" import="java.io.*" %>
<% @ implements="java.io.Serializable" %>

Les directives affectent des valeurs à des variables. On peut ainsi implémenter une méthode ou spécifier le type de contenu en sortie (output content), etc. Les différentes variables sont les suivantes: language, method, import, content_type, implements, et extends.

Les déclarations ont la forme suivante:

<SCRIPT runat=server>
 public void init (ServletConfig config) throws ServletException
  {
    // code de la méthode
  }
</SCRIPT>


Les scriptlets identifient le code Java destiné aux servlets, par exemple:

<%
 String name = request.getParameter("Nom");
 out.println(nom);
%>


fournit en sortie le contenu du paramètre "Nom".

Enfin les expressions sont une notation raccourcie pour la valeur de retour d'un servlet: ainsi,

<%= request.getParameter("Name"); %>

a le même effet que le scriplet qui précède.

Par ailleurs, les balises spécifiant l'accès à un JavaBean de contenu résultant ont la forme suivante (qui ne présente pas tous les attributs possibles):

<BEAN name="Nom" varname=monBean introspect="yes" create="no" scope="session">
</BEAN>

L'attribut name contient la clé permettant de retrouver le JavaBean; l'attribut varname contient le nom de la variable locale qui désigne le JavaBean, et qui sera utilisée dans les scriptlets; l'attribut introspect fixé à "yes" précise que pour toute propriété du JavaBean dont le nom correspond au nom d'un paramètre d'une requête, la méthode de réglage doit être appelée, à chaque requête, pour fixer cette propriété à la valeur du paramètre correspondant; l'attribut create fixé à "yes" spécifie que le JavaBean doit être créé s'il n'existe pas (fixé à "no", un message d'erreur est renvoyé); enfin, l'attribut scope peut être fixé à "request" (dans ce cas, le JavaBean ne sert que le temps d'une requête) ou à "session" (le JavaBean peut alors être utilisé par des requêtes multiples).

Compléments
Cette présentation ne prétend pas être exhaustive. Pour plus d'informations, vous pouvez consulter la page de Sun: http://java.sun.com/products/jsp/
 ou bien le site suivant: www.servlets.com

 
[ Jérôme MorlonJDNet
 
Accueil | Haut de page