Programmation Java côté
serveur servlets et JSP
Première servlet Nous avons déjà vu ce qu’était une applet : application écrite en Java dont le code exécutable (bytes codes) est automatiquement transmis par un serveur à un client à partir d’une simple demande d’affichage d’une page HTML. Le programme correspondant, bien que situé chez le serveur, s’exécute chez le client en utilisant les ressources de ce dernier. La servlet consiste également en un programme Java situé sur le serveur mais, cette fois, il s’exécute sur le serveur lui-même et utilise donc ses ressources, qu’il s’agisse de puissance de calcul ou d’accès à des bases de données. Comme pour une applet, le lancement d’une servlet se fait par la demande d’affichage d’une page HTML, en introduisant une URL dans un navigateur (ou en cliquant sur un lien). Nous verrons cependant plus loin qu’il existe des mécanismes supplémentaires permettant au client de fournir des informations à la servlet. Pour l’instant, nous commencerons par une servlet très simple ne nécessitant aucune transmission d’informations ; elle se contentera d’afficher dans une page le texte « bonjour ».
Ecriture de la servlet
La classe HttpServlet et la méthode doGet
Une servlet va se présenter comme une classe dérivée de la classe HttpServlet fournie dans le package javax.servlet1. La méthode doGet, héritée de la classe HttpServlet est appelée lorsque le client lance la servlet correspondante. Elle dispose de deux arguments : • le premier, de type HttpRequest, permet de récupérer les informations fournies lors de l’appel ; pour l’instant, nous n’aurons pas à nous en préoccuper ; • le second, de type HttpServletResponse, créé automatiquement par l’environnement du serveur, permet d’identifier le client. Nous devons donc redéfinir cette méthode doGet. Voici un premier canevas de notre classe servlet que nous nommerons Bonjour : import java.io.* ; import javax.servlet.* ; import javax.servlet.http.* ; public class Bonjour extends HttpServlet { public void doGet (HttpServletRequest req, HttpServletResponse rep) throws IOException, ServletException { // instructions affichant bonjour dans la page } } 1. Attention, ce package fait partie de J2EE, pas de J2SE. Suivant les cas, il se peut que vous ayez besoin de charger ou de télécharger des fichiers complémentaires. 1 – Première servlet 605 Notez que la méthode doGet est susceptible de lever deux sortes d’exceptions : • IOException, définie dans le package java.io, • ServletException, définie dans le package javax.servlet. Par ailleurs, les classes HttpServlet, HttpServletRequest et HttpServletResponse sont définies dans le pakcage javax.servlet.http. D’où les instructions import correspondantes. 1.1.2 Construction de la réponse au client Le deuxième paramètre de doGet identifie le client. La méthode getWriter de la classe HttpResponse fournit un flux de type PrintWriter qui sera automatiquement connecté au client correspondant (plus précisément à son navigateur). Il suffit donc d’afficher classiquement les informations voulues, en recourant aux méthodes de la classe PrintWriter, par exemple print ou println. Auparavant, cependant, il faudra prévenir le navigateur du client du type d’information qu’on va lui transmettre, même si, comme c’est généralement le cas, il s’agit d’une page HTML. Pour ce faire, on applique la méthode setContentType à l’objet réponse, en lui fournissant une chaîne précisant le type (text) et le sous-type (html) : rep.setContentType (« text/html ») ; Voici une première ébauche de notre méthode doGet : public void doGet (HttpServletRequest req, HttpServletResponse rep) throws IOException, ServletException { rep.setContentType (« text/html ») ; PrintWriter page = rep.getWriter() ; // instructions du type page.print (…..) ou page.println (…..) // pour afficher les balises HTML dans la page à transmettre au client } Voici finalement le texte de notre servlet complète qui se contente d’afficher le message bonjour dans une page HTML ayant pour titre « Servlet Bonjour ». import java.io.* ; import javax.servlet.* ; import javax.servlet.http.* ; public class Bonjour extends HttpServlet { public void doGet (HttpServletRequest req, HttpServletResponse rep) throws IOException, ServletException { rep.setContentType (« text/html ») ; PrintWriter page = rep.getWriter() ; page.println (« ») ; page.println (« ») ; page.println (« ») ; page.println (« ») ; page.println (« ») ; Programmation Java côté serveur : servlets et JSP CHAPITRE 22 606 page.println (« « ) ; page.println (« BONJOUR ») ; page.println (« »)