SERVELT / JSP
serveur d'application
- TOMCAT, Serveur d'application souvent intégré au serveur Apache, est un produit Opensource concurrent de WAS (Liberty) d'IBM
Qu'est-ce qu'un serveur d'applications ? - L'API Servlet 2.2 a été développée afin de permettreà un serveur de traiter des requêtes dans un environnement distribué et plus particulièrement des requêtes HTTP. Les servlet sont ansi un remplacement idéal (basé sur Java) des script CGI.
- L'API java Server Pages 1.1 apporte une solution à l'un des problèmes soulevé par les servlets HTTP: l'imbrication du code HTML dans le code JAVA. (une page JSP est transformée en servlet à la volée) - Le troisème volet souvent associé à ces deux premiers est JDBC, pemettant un accès universel aux bases de données hétérogènes. -Tomcat est un conteneur de servlet (ou serveur d'application) et implémente ces APIs (et quelques autres) comme le produit commercial IBM : Webspshere Application Server. Ils peuvent offrir en plus, suivant la version, de nombreux
avantages comme les pools de connexion (mutualisation
des accès base de données), la gestion
de la montée en charge, etc... |
- Voyez
- la documentation officielle jakarta (code pour TOMCAT).
- notre cours sur Apache/ TOMCAT pour IBM i
- Cette page sur developerworks
- la documentation officielle jakarta (code pour TOMCAT).
Quelques exemples d'utilisation
Premiers pas, la différence entre une servlet et une page JSP.- Regardez à notre première servelt :
import java.io.*; |
il s'agit d'un "programme" générant du HTML (comme CGI ou NETDATA), la puissance objet en plus,
à chaque modification, il faut "recompiler" la classe
<HTML> |
Nous nous retrouvons dans une page HTML (modifiable avec Dreamweaver ou Websphere studio), incluant du code java ou utilsant les propriétés d'objets java (bean) importés.
Les codes <% et %> permettent aux graphistes et à leurs outils de ne pas toucher à la partie "coding" et de se concentrer sur le look. (Dreamweaver fait cela très bien)
- Accessoirement une page JSP est placée directement dans le répertoire correspondant au point de montage pour TOMCAT(JkMount /example/* inprocess, dans httpd.conf), soit /www/votre-instance/webapps/exampleet le serveur d'application en fait une servlet à la volée. Une classe doit être compilée (javac) , placée dans /www/votre-instance/webapps/example/WEB-INF/classes et doit être référencée dans le fichier web.xml de /www/votre-instance/webapps/example/WEB-INF(bref JSP c'est plus simple).
- Dans la pratique, il ne faut pas les opposer et nous utiliserons l'architecture Modèle/Vue/Controleur ou MVC.
- Il s'agit d'une page html/jsp contenant un formulaire (comme CGI ou Netdata)
- le formulaire invoque une servlet (par <form action="xxx">) qui en fonction des paramètres construit un/des objets java
(bean) réalisant les accès base de données (JDBC) et encapsulant ces dernières.
(ce sont des données Modélisées, d'où le modèle) - puis la servlet demande l'affichage d'une page
JSP ou d'une autre (rôle d'aiguilleur ou de contrôleur),
page constituant la réponse à afficher (par getRequestDispatcher("/example/ma-page.jsp"))
la page JSP correspond à à la mise en forme des données et utilise le/les beans générés.cela permet de retrouver la séparation du traitement et de l'affichage que nous connaissons sur l'AS/400,
la servlet représentant le programme et la page JSP le DSPF.(la notion d'objet en plus bien sûr !).
- Exemple de servlet utilisant JDBC pour accèder à la base (ici la classe est notée en "dur" dans le code)
import java.io.*;
out.println("<tr>"); while(rs.next()) |
- En route vers MVC :
- Nous allons d'abord créer une classe PAYS (un code, un nom)
- Puis une classe ListePays, dans laquelle nous placerons tous les PAYS (ce sera notre bean dans la page JSP)
- la servlet lancant tout le processus et redirigant la requête vers la page JSP
- et enfin la page JSP utilisant ListePays et pour chaque élément (de type PAYS) de la liste, générant une ligne de tableau html.
- Qui doit afficher cela.
- MVC Complet :
- Nous allons séparer le code
d'accès à la base de donnée de la servlet afin de
lui attribuer uniquement son role d'aiguilleur
Choix de la page JSP à afficher en fonction du client par exemple (PC, PocketPC, palm, ...) - création donc d'un nouvel objet TraitementPays instancié par la servlet et réalisant la connexion JDBC et le remplissage de ListePays
- traitement ensuite à l'identique ...
- Nous allons séparer le code
d'accès à la base de donnée de la servlet afin de
lui attribuer uniquement son role d'aiguilleur
- Si nous voulons ajouter un critère pour constituer la liste (saisie d'une partie du nom) , il faudra :
- Ajouter une page Html avec un formulaire <form action="/example/ServletJdbc/" ...
- Ajouter à la servlet : req.getParameter("pays");
Où pays est le nom de la variable (<input type="text"..) dans le formulaire - Ajouter à la méthode getListe de l'objet TraitementPays, un paramètre en entrée (la saisie).
- L'objet ListePays pourrais alors nous servir à mémoriser ce paramètre afin de le réafficher dans la page JSP
- Concatener " select * from pays where pays like '% " au paramètre recu puis à " %' "
- lancer la requête et la traiter de la même manière ...
Webfacing, produit IBM transformant vos DSPF en pages JSP utilise la même technique (MVC) , voyez cette page