HttpServlet
. Elle comporte trois méthodes fondamentales :
init()
, qui est appelée une fois que Tomcat a instancié cette servlet, l’a chargée en mémoire. Cette méthode est appelée avant tout traitement d’une requête par la servlet. Il existe une méthode équivalente,
destroy()
, appelée avant la destruction de cette servlet. Surcharger cette méthode est facultatif.
doGet()
et une méthode
doPost()
. Ces deux méthodes sont celles qui « font le travail ». La première est appelée lors d’une requête de type
GET
, et la seconde lors d’une requête de type
POST
. Elles reçoivent en paramètres deux objets qui correspondent au flux de sortie et au flux d’entrée vers le navigateur client. Les informations envoyées par le navigateur sont sur le flux d’entrée, tout ce qui est écrit sur le flux de sortie sera reçu par lui. Les types de ces flux sont
HttpServletRequest
et
HttpServletResponse
. Ces méthodes sont en fait appelées par la méthode
service()
de la classe
Servlet
, que l’on a pas à surcharger. Notons que sur notre exemple, la méthode
doPost()
appelle la méthode
doGet()
, ce qui est parfaitement légal.
Exemple 17. Une première servlet
package org.galilee.servlet ; import java.io.* ; import java.text.* ; import java.util.* ; import javax.servlet.* ; import javax.servlet.http.* ; public Bonjour extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html") ; PrintWriter out = response.getWriter() ; out.println("<html>") ; out.println("<head>") ; out.println("<title>Bonjour le monde !</title>") ; out.println("</head>") ; out.println("<body>") ; out.println("<h1>Bonjour le monde !</h1>") ; out.println("</body>") ; out.println("</html>") ; } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response) ; } }
WEB-INF
. Ce répertoire
WEB-INF
doit contenir un fichier de configuration
web.xml
dont nous allons voir un exemple. Il peut enfin contenir :
lib
, qui contient des fichiers JAR. Les classes de ces fichiers sont chargées par le
class loader
propre à cette application web ;
classes
contenant une hiérarchie de classes Java. Ces classes sont chargées par le
class loader
de cette application web. En cas de collision avec des classes contenues dans un JAR, c'est la classe déclarée dans ce répertoire qui a la priorité.
web.xml
.
Exemple 18. Fichier
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.5//EN"
"http://java.sun.com/dtd/web-app_2_5.dtd">
<web-app>
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>org.galilee.servlet.Bonjour</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/bonjour</url-pattern>
</servlet-mapping>
</web-app>
web-app
. On trouve deux éléments fils :
servlet
et
servlet-mapping
.
L’élément
servlet
permet de déclarer des servlets, et de les associer à des classes Java. Dans notre cas, nous créons une servlet appelée
Hello
, associée à la classe Java
org.galilee.servlet.Bonjour
, qui doit donc se trouver dans un fichier
Bonjour.class
et dans la bonne structure de répertoire.
L’élément
servlet-mapping
permet d’associer une servlet à une URL. Cette déclaration doit bien sûr être cohérente avec ce qui a été déclaré dans Tomcat (et éventuellement Apache). Dans notre exemple, notre servlet est associée à l’URL
/bonjour
.
Ces deux éléments sont en relation l'un avec l'autre grâce au fait qu'ils ont même valeur pour le sous-élément
servlet-name
. Notons enfin que deux servlets différentes peuvent se référer à la même classe Java. Nous verrons l’intérêt de ce genre de choses dans la suite.
WEB-INF/classes
, à démarrer Tomcat, et à l’invoquer dans un navigateur par l’URL
/bonjour/bonjour
.
Ajouter d'autres servlets à cette application web est ensuite très simple : il suffit d’ajouter les deux éléments
servlet
et
servlet-mapping
dans le fichier
web.xml
, et la classe Java dans le bon répertoire.