SERVLET/JSP
TOMCAT et serveurs d'application
- Serveur d'application souvent intégré au serveur Apache, c'est un produit Opensource concurrent de WAS 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.
Cette API apporte des packages précieux comme :
- javax.servlet et javax.servlet.http : gestion de la requête, des sessions et des cookies
- javax.mail : gestion des mails
- javax.transaction (gestion des transactions) et javax.xml (gestion de flut XML)
- 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...
Depuis la V6R1, TOMCAT n'est plus livré avec l'OS, IBM propose à la
place un
serveur d'application intégré (LWI) basé sur OSGI,
vous pouvez aussi télécharger la version Open Source
|
Quelques exemples d'utilisation de TOMCAT.
Premiers pas, la différence entre une servlet et une page JSP.
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; /** * @version 1.0 * @author Christian MASSé. */ public class Bonjour extends HttpServlet { public void service(ServletRequest req, ServletResponse rep) throws ServletException, IOException { rep.setContentType("text/html"); PrintWriter out = rep.getWriter(); out.println("<HTML>"); out.println("<HEAD>"); out.println("<TITLE>Bonjour</TITLE>"); out.println("</HEAD>"); out.println("<BODY>"); out.println("<P>Bonjour ! <i>(le fameux Hello World)</i></P>"); out.println(new java.util.Date().toString()); out.println("</BODY>"); out.println("</HTML>"); } }
|
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> <HEAD> <TITLE>Bonjour.jsp</TITLE> </HEAD> <BODY> <P>Bonjour ! <i>(le fameux Hello World en JSP)</i></P> <%=new java.util.Date()%> </BODY> </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.
- Exemple de servlet utilisant JDBC pour accèder à la base (ici la classe est notée en "dur" dans le code)
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; import java.util.*; /** * @version 1.0 * @author Christian Massé */ public class ServletJdbc extends HttpServlet {
private Connection dbcon; public void init(ServletConfig config) throws ServletException { super.init(config);
try { //Déclaration du driver : Class.forName("com.ibm.as400.access.AS400JDBCDriver"); //Url de connexion String dbUrl = "jdbc:as400://AS400/BDVIN1"; //Profil/mot de passe String user = "UUUUUUUU"; String password = "PPPPP";
//connexion à la base dbcon = DriverManager.getConnection(dbUrl,user,password); } catch (Exception e) { throw new UnavailableException(e.getMessage()); } }
/** * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title> liste des pays</title>"); out.println("</head>"); out.println("<body>"); out.println("<html>"); out.println("<table border=1>");
out.println("<tr>"); out.println("<th>Code Pays</th>"); out.println("<th>Nom du Pays</th>"); out.println("</tr>"); try { Statement s = dbcon.createStatement(); ResultSet rs = s.executeQuery("select * from bdvin1.pays");
while(rs.next()) { out.println("<tr>"); out.println("<td>" + rs.getString("PAYS_CODE") + "</td>"); out.println("<td>" + rs.getString("PAYS") + "</td>"); out.println("</tr>"); } rs.close(); s.close(); } catch (SQLException sqle) { resp.sendError(500 , "Erreur lors de l'accès à la base" + sqle); } out.println("</table>"); out.println("</body>"); out.println("</html>");}
/** * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
|
- 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 ...
- 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
Copyright © 1995,2011 VOLUBIS
|
|