Nous allons
nous intéresser dans cet article à l'écriture
de servlets Java simples. La première étape est bien
sûr de disposer d'un serveur web permettant d'exécuter
de tels servlets. Une implémentation libre, Tomcat
(développée au sein du projet Jakarta par l'Apache
Software Foundation), adossée à un serveur web comme
Apache, existe à cette fin. L'installation de Java est évidemment
un pré-requis.
La structure de base d'un servlet Java est la suivante:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class monServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletRequest
response)
throws ServletException, IOException {
// analyse de la requête HTTP (request)
// lecture éventuelle des données
de formulaire HTML
// production de la réponse HTTP (response)
PrintWriter out = response.getWriter();
// Envoi de contenu au navigateur
}
}
Par exemple, si nous souhaitons récupérer les données
concernant la commande d'un utilisateur, et lui afficher ensuite
sur son navigateur, nous allons bâtir un formulaire HTML permettant
de saisir les données et faisant appel à notre servlet.
Au sein de ce dernier, on récupèrera les noms (attribut
"name") des paramètres par:
String[] noms = request.getParameterNames();
Nous allons ensuite imbriquer le traitement des données et
l'envoi de la réponse:
response.setContentType("text/html"); // type de contenu
renvoyé au navigateur
PrintWriter out = response.getWriter();
out.println("<BODY><H>Votre commande:<H><TABLE>");
while(noms.hasMoreElements()) {
String nom = (String)noms.nextElement();
out.println("<TR><TD>" + nom +
"</TD><TD>");
String[] valeurs = request.getParameterValues(nom);
if (valeurs.length == 1) {
String valeur = valeurs[0];
if (valeur.length() == 0)
out.print("-");
else
out.print(valeur);
}
else {
out.println("<UL>");
for(int i=0; i<valeurs.length; i++) {
out.println("<LI>"
+ valeurs[i]);
}
out.println("</UL>");
}
out.println("</TD></TR>");
}
out.println("</TABLE></BODY>");
Evidemment, le code HTML produit est ici extrêmement simplifié.
On distingue tout de même trois types d'affichage des valeurs,
selon que la valeur n'est pas précisée, simple ou
multiple.
Nous achèverons notre servlet avec une petite astuce (communément
utilisée) pour s'affranchir de la méthode d'envoi
des données de formulaire (GET
ou POST): nous avons en effet (re)défini jusqu'à
présent des méthodes doGet exclusivement. Nous allons
rajouter ce qui suit:
public void doPost(HttpServletRequest request, HttpServletResponse
response)
throws
ServletException, IOException {
doGet(request, response);
}
afin d'appeler également la méthode doGet en cas d'envoi
par la méthode POST.
Notre servlet sera alors le suivant:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class monServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletRequest
response)
throws ServletException, IOException {
String[] noms = request.getParameterNames();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<BODY><H>Votre commande:</H><TABLE>\n");
while(noms.hasMoreElements()) {
String nom = (String)noms.nextElement();
out.println("<TR><TD>"
+ nom + "</TD><TD>");
String[] valeurs = request.getParameterValues(nom);
if (valeurs.length == 1) {
String valeur = valeurs[0];
if (valeur.length() == 0)
out.print("-");
else
out.print(valeur);
}
else {
out.println("<UL>");
for(int i=0; i<valeurs.length;
i++) {
out.println("<LI>"
+ valeurs[i]);
}
out.println("</UL>");
}
out.println("</TD></TR>\n");
}
out.println("</TABLE></BODY></HTML>");
public void doPost(HttpServletRequest request, HttpServletResponse
response)
throws
ServletException, IOException {
doGet(request, response);
}
}
Il s'agit là d'un exemple simple, mais l'intérêt
des servlets réside aussi, et surtout, dans la manipulation
de bases de données via JDBC.
|