Servlet
est l'interface centrale de cette API. Toutes les instances de servlets implémentent cette interface, en général indirectement. Cette interface ne définit que cinq méthodes :
L'interface
Servlet
modélise un objet servlet encore très abstrait, et complètement détaché de ce que fait une servlet HTTP. En toute rigueur, une instance de
Servlet
est juste un objet qui vit dans un serveur, soumis à un cycle de vie très simple (création / service / destruction), qui a accès à des information de configuration et des méta-données sur lui-même.
init(SevletConfig)
et
destroy()
appelée sur création et destruction de cette servlet.
service(ServletRequest req, ServletResponse res)
: appelée lorsqu'une requête doit être traitée par une servlet. Cette méthode est générique, et est appelée par les méthodes
doGet()
et
doPost()
(entre autres).
getServletConfig()
et
getServletInfo()
permettent de récupérer des informations sur la servlet.
GenericServlet
précise les choses : outre les implémentations des méthodes de l'interface
Servlet
, elle propose les méthodes suivantes.
init()
et
init(ServletConfig config)
: ces méthodes permettent de gérer une partie du déroulement du cycle de vie. Nous verrons ce cycle de vie dans la suite.
getInitParameterNames()
et
getInitParameter(String name)
: ces méthodes permettent de récupérer les paramètres d'initialisation de cette servlet, déclarés dans le
web.xml
.
log(String msg)
et
log(String message, Throwable t)
: enfin ces méthodes permettent d'enregistrer des messages dans les fichiers journal du container. Ces méthodes n'ont que peu d'intérêt, on préfèrera en général utiliser des utilitaires comme Log4J ou slf4J.
HttpServlet
nous fait réellement entrer dans les servlets pour le web. Elle propose un jeu de méthodes pour chaque requête HTTP qui existe :
doDelete()
,
doGet()
,
doHead()
,
doOption()
,
doPost()
,
doPut()
,
doGet()
doTrace()
et
doLastModified()
. Les implémentations de ces méthodes sont vides : elles ne remplissent aucune fonction. Simplement, elles sont appelées par le container de servlets sur requête d'un client, avec les bons paramètres, de type
HttpServletRequest
et
HttpServletResponse
. Pour programmer une servlet, il faut donc étendre cette classe, et fournir une implémentation qui convient à toute ou partie de ces méthodes. En général, ce sont les méthodes
doGet()
et
doPost()
qui sont étendues.
init()
de cette servlet, pour lui signaler qu'elle doit se préparer à traiter des requêtes. Une fois cette méthode exécutée, la servlet peut traiter des requêtes.
Cette méthode
init()
est appelée par le serveur d'application avec un objet de type
ServletConfig
en paramètre. C'est par cet objet qu'une servlet peut accéder à ses paramètres d'initialisation.
Les paramètres d'initialisation sont déclarés dans l'élément
servlet
du fichier
web.xml
, et sont lus dans la méthodes
init()
, via l'objet
ServletConfig
.
Exemple 19. Déclaration d'un paramètre d'initialisation d'une servlet
<servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>org.paumard.cours.servlet.TestServlet</servlet-class> <init-param> <description>paramètre d'initialisation</description> <param-name>max-retry</param-name> <param-value>10</param-value> </init-param> </servlet>
Exemple 20. Lecture d'un paramètre d'initialisation dans une servlet
public class TestServlet extends HttpServlet { private int maxRetry = 0 ; public void init(ServletConfig servletConfig) { String maxRetryString = servletConfig.getInitParameter("max-retry") ; this.maxRetry = Integer.parseInt(maxRetryString) ; } // suite du code de la servlet }
UnavailableException
lors de l'exécution de sa méthode
init()
.
getInitParameter(String)
, qui prend en paramètre le nom du paramètre considéré,
max-retry
dans notre exemple. Cette méthode retourne une
String
, qu'il va nous falloir convertir en
int
dans notre exemple.
On peut également accéder à la liste de tous les paramètres d'initialisation par appel à la méthode
getInitParameterNames()
, qui retourne un
Enumeration
.