Imaginez que vous souhaitez attribuer un titre à votre application et que celui-ci soit lié à vos servlets.
Pour éclaircir la chose, vous savez qu'une page JSP est appelée via une servlet :
Comment feriez-vous pour affecter un titre différent à votre JSP selon la servlet qui appellera cette JSP ?
Je suppose que la première chose à laquelle vous avez pensé était de mettre ce titre "
en dur" dans le code de votre servlet... C'est-à-dire que ce nom est défini et attribué à votre page JSP dans une servlet ! Un peu comme ceci :
Code : Java | request.setAttribute("titre", "Titre de ma page");
|
Ou encore de définir une variable de classe initialisée avec le titre...
Ces méthodes fonctionnent très bien, je vous rassure ! Par contre, il y a un autre moyen de faire ceci : en utilisant des
paramètres d'initialisation de servlets.
Les quoi ?
Les paramètres d'initialisation.
C'est très simple. Lorsque votre servlet vient à la vie, vous pouvez lui dire qu'elle a, à sa disposition, différents paramètres que vous lui aurez attribués !
Afin de vous montrer que nous pouvons initialiser plusieurs paramètres, je ne vais pas en créer un, mais deux !
Et comment tu fais ça ?
Ceci se fait grâce à notre bon vieux fichier
web.xml. Par exemple, pour affecter l'attribut "
nomPage" ayant pour valeur "
Nom de ma page" et un autre ayant pour nom "
sousTitre" et comme valeur "
Sous titre de la page"à une servlet, vous n'avez qu'à faire ceci :
Code : XML 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | <web-app>
<servlet>
<servlet-class>com.sdz.control.Index</servlet-class>
<servlet-name>StartPage</servlet-name>
<init-param>
<param-name>titrePage</param-name>
<param-value>Nom de la page</param-value>
</init-param>
<init-param>
<param-name>sousTitre</param-name>
<param-value>Sous titre de la page</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>StartPage</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
|
C'est simple et clair ! La balise XML
<servlet></servlet>
encapsule autant de balises
<init-param></init-param>
qu'elle le souhaite (enfin, que vous le souhaitez...

).
Comprenez bien que ces paramètres ne seront utilisables uniquement par la servlet concernée : ici,
com.sdz.control.Index
!
Et comment on les utilise ?
Voici la servlet liée au fichier
web.xml sus-mentionné et qui utilise les paramètres :
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 | package com.sdz.control;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Index extends HttpServlet {
public void doGet( HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException{
//Bon, là, c'est simple tout de même...
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//La servlet a une méthode de récupération des noms de ces paramètres
Enumeration e = getInitParameterNames();
//On récupère un objet de configuration de servlets
ServletConfig conf = getServletConfig();
//Et on parcourt le tout
while(e.hasMoreElements()){
String name = e.nextElement().toString();
//On appelle la méthode getInitParameter(String name)
//afin de récupérer la valeur
out.println("<p><strong>" + name + " = " + conf.getInitParameter(name) + "</strong></p>");
}
//Vous pouviez aussi y accéder comme ceci
//out.println(getServletConfig().getInitParameter("titrePage"));
//out.println(getServletConfig().getInitParameter("sousTitre"));
}
}
|
Ce qui nous donne :
C'est très simple d'utilisation et très utile !
Bon, nous avons utilisé une façon de faire un peu plus générique puisque nous avons récupéré tous les noms de paramètres afin de tous les afficher...
Nous avons récupéré la liste des noms de paramètres grâce à l'instruction
Enumeration e = getInitParameterNames();
puis nous avons affiché le contenu des différents paramètres en les invoquant via cette instruction :
getInitParameter(name);
de l'objet
ServletConfig.
C'est sûr, mais qu'est-ce que c'est que cet objet : ServletConfig ?
Dites-vous que votre conteneur, Tomcat, est très sympa et qu'au moment de créer votre servlet, il crée un objet contenant tous les paramètres d'initialisation !
Et cet objet est le suivant :
Cet objet n'a pas beaucoup de méthodes, mais vous pouvez deviner ce que celles-ci font...
Dis donc, la méthode getInitParameterNames()
, tu n'as pas utilisé cet objet pour l'invoquer tout à l'heure ?
Votre sens de l'observation s'est grandement amélioré depuis le début de ce tuto, ou c'est moi...

En fait, dans nos servlets, il y a une méthode qui s'appelle ainsi et qui a le même rôle que la méthode de l'objet en question, et pour cause : la méthode présente dans notre servlet invoque la méthode de l'objet
ServletConfig...
Par contre, que fait la méthode getServletContext()
?
Nous allons aborder ceci tout de suite...
Par contre, même si vous êtes d'accord sur l'utilité de ces paramètres d'initialisation, imaginez un instant le cas contraire à ce que je vous demandais plus haut :
imaginez que vous ayez besoin d'un titre d'application commun à chaque page !
Comment procéderiez-vous ? Où mettre ce titre ? Dans toutes nos servlets ? Dans toutes nos JSP ?
Je vous laisse réfléchir sur la marche à suivre quelques instants avant de vous donner une réponse, mais ceci a un rapport avec le fameux objet
ServletContext.