SERVELT / JSP

TOMCAT et serveurs d'application

TOMCAT :

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

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)

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);
}

}

Webfacing, produit IBM transformant vos DSPF en pages JSP utilise la même technique (MVC) , voyez cette page