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
|