Vous avez remarqué que les servlets sont des outils très puissants et très faciles à mettre en oeuvre puisque d'une part, chaque servlet est compilée et donc la réponse à une requête est très rapide comparativement aux CGI classiques, et par ailleurs, il existe plein d'objets qui sont créés automatiquement pour la situation et qu'il suffit d'utiliser leurs méthodes respectives pour répondre aux différentes requêtes. Toutefois, il peut paraître fastidieux d'utiliser la méthode println pour envoyer des balises HTML. Java dispose d'une technologie qui mélange à la fois le balisage HTML (script) et le codage propre aux servlets (partie compilée). Il s'agit de la technologie JSP - Java Server Pages.
Dans les pages JSP, Il suffit d'écrire le code HTML classique normalement, en passant par vos outils de création de pages Web. Le code correspondant aux parties dynamiques doit ensuite être placé entre des étiquettes spéciales, dont la plupart commencent par <% et se terminent par %>. Les pages JSP possèdent l'extension ".jsp" au lieu de l'extension ".htm" pour les pages HTML classiques. Dans le cas d'une extension ".jsp", le serveur Tomcat est au courant qu'au sein de la page Web, il va trouver du code Java.
<%= request.getParameter("title") %> Bien que le code que vous écriviez s'apparente plus à un fichier HTML classique qu'à un servlet, dans les coulisses, la page JSP est convertie automatiquement en un servlet normal, le code HTML statique étant simplement envoyé dans le flux de sortie associé à la méthode service du servlet. Cette conversion est normalement effectuée lors de la première requête à cette page. Pour éviter que le premier utilisateur n'attende un long moment pendant la conversion de la page JSP en servlet et pendant sa compilation, les développeurs peuvent simplement demander cette page immédiatement après l'avoir installée.
Les éléments de scripts JSP permettent d'insérer du code dans le servlet qui sera généré à partir de la page JSP. Il en existe trois formes :
Une expression JSP permet d'insérer des valeurs directement dans la sortie. En voici le format <%= Java Expression %> L'expression est évaluée, convertie en une chaîne, puis insérée dans la page. Cette évaluation est effectuée au moment de l'exécution (lorsque la page est demandée) et dispose donc d'un accès complet aux informations concernant la requête. Par exemple, l'expression suivante affiche la date et l'heure à laquelle la page a été demandée :
Date courrante : <%= new java.util.Date() %>
Il faut préciser que la classe Date fait parti du langage java classique et n'est pas spécialisé à JSP.
Pour simplifier ces expressions, vous pouvez utiliser certaines variables prédéfinies. Ce sont des objets implicites dont les plus importants sont :
En voici un exemple :
Nom de l'hôte : <%= request.getRemoteHost() %>
Vous allez mettre en oeuvre un petit exemple de page JSP qui utilise les expressions à l'aide de l'environnement de JBuilder. Le contenu de la page JSP consistera à fournir la date et l'heure ainsi que le nom de l'ordinateur hôte. La technique de mise en oeuvre est exactement la même que pour les servlets, à savoir :
Nous allons donc utiliser cette procédure en commançant par l'élaboration du projet. Ce projet, vous l'appellerez : DateHote.
Tout de suite après, définissez votre "Application Web" que vous pouvez appeler DateHote.
Enfin, à l'aide de la galerie d'objet, sélectionnez l'expert JSP pour fabriquer votre première page que vous nommerez "DateHote.jsp". C'est la première page de l'expert qu'il faut régler. Pour la deuxième, il suffit de cliquer sur "Terminer".
Vous remarquez que vous obtenez l'ossature générale d'un page Web avec toutes les balises HTML nécessaires. Il suffit de compléter la page et de placer les expressions propres au langage Java.
DateHote.jsp
L'écriture est extrêmement simple. On se rend compte que si le serveur doit renvoyer des pages Web, il est plus judicieux d'utiliser les JSP plutôt que des servlets. Vous allez tester votre page. N'oubliez pas de lancer votre serveur Tomcat.
Le serveur Tomcat est placé sur l'ordinateur portable avec le port 80.
La première fois, le chargement paraît long. En fait, la page est compilée en servlet. Par contre, plus tard, le chargement sera au contraire extrêmement rapide puisque c'est un programme qui fonctionne en tâche de fond. Finalement, nous avons à la fois l'avantage d'une écriture sous forme de script comme ASP, PHP, ... et en plus la rapidité d'un système compilé.
Si vous désirez quelque chose de plus complexe que l'insertion d'une simple expression, les scriptlets JSP permettent d'insérer n'importe quel code dans la méthode jspService du servlet (qui est appelée par service). Les scriptlets ont la forme suivante :
<% code Java %> // Il n'y a plus le signe "="
Les scriptlets ont accès aux mêmes variables définies automatiquement que les expressions (request, response, session, out, etc...) ; Donc si vous souhaitez que la sortie apparaisse dans la page résultante, vous devez utiliser la variable out, comme dans l'exemple suivant :
Dans ce cas particulier, vous auriez pu atteindre le même effet plus facilement au moyen de l'expression JSP suivante :
Protocole utilisé : <%= request.getProtocol() %><%= request.getQueryString() %>
En général, cependant, le scriptlet peut effectuer une grande quantité de tâches qui ne peuvent pas être exécutées uniquement avec des expressions. Parmi ces tâches se trouvent la mise à jour d'une base de données, ou encore l'exécution d'un code contenant des boucles, des instructions conditionnelles ou d'autres constructions complexes.
Deuxième page JSP - Traitement de formulaire
Nous allons reprendre le formulaire déjà traité avec la servlet, mais cette fois-ci à l'aide de JSP. La page à construire s'appellera donc Formulaire.jsp. Pour souvenir, revoici la page du formulaire :
Il faut modifier légèrement le code de la page html du formulaire pour qu'elle puisse appelée la page Formulaire.jsp :
Formulaire.htm
La page Formulaire.jsp est à construire à partir de "l'expert JSP" de Jbuilder. Au sein de la page, vous allez trouver à la fois des expressions et des scriptlets. On remarque que la plus grande partie du code est identique à la servlet équivalente.
Formulaire.jsp
A titre d'exercice, nous allons mettre en oeuvre une page web écrite en JSP qui permettra à l'utilisateur de choisir à la fois la couleur du fond et la couleur du texte de la page appelée. L'utilisateur devra passer ses paramètres directement sur l'URL dans la ligne d'adresse comme lorsqu'on utilise la méthode GET. les paramètres s'appellent Fond et Texte. Voici un exemple d'utilisation et le résultat obtenu.
Couleurs.jsp
Code de Couleurs.jsp
Une déclaration JSP permet de définir des méthodes ou des attributs qui seront insérés dans le corps de la classe du servlet (en dehors de la méthode jspService appelée par service pour traiter la requête). Voici le format d'une déclaration :
<%! code Java %>
L'avantage de ces déclarations, c'est que ces attributs concervent leurs valeurs même lorsque nous sommes sortie de la page. Lorsque nous entrons de nouveau, nous retrouvons l'ancienne valeur. Comme les déclarations ne produisent aucune sortie, elles sont normalement utilisées en conjonction avec des expressions JSP ou des scriptlets.
Voici un exemple de code JSP qui affiche le nombre de requêtes obtenues pour la page actuelle, et depuis le dernier démarrage du serveur (ou depuis la dernière modification de la classe du servlet).
Compteur.jsp