OVH Cloud OVH Cloud

Lire une clé de web.xml

8 réponses
Avatar
Zouplaz
Bonjour, encore une question !

J'ai une classe qui ne dérive pas de HttpServlet et donc n'a pas accès à la
méthode getInitParameter.

Comment puis-je lire une clé qui est dans web.xml ?

Mon besoin, tout simple, est de lire quelques informations propres à la
configuration de l'application (ex. <appmailserver>x.x.x.x<appmailserver/>.



Merci

8 réponses

Avatar
Zouplaz
Zouplaz - :

Bonjour, encore une question !

J'ai une classe qui ne dérive pas de HttpServlet et donc n'a pas accès
à la méthode getInitParameter.

Comment puis-je lire une clé qui est dans web.xml ?

Mon besoin, tout simple, est de lire quelques informations propres à
la configuration de l'application (ex.
<appmailserver>x.x.x.x<appmailserver/>.



Merci



Pardon, j'ai écrit une idiotie : la clé serait sous la forme

<context-param>
<param-name>appmailserver</param-name>
<param-value>x.x.x.x</param-value>
</context-param>

Avatar
Symon
Tu peux passer le Context en paramètre à la méthode qui a besoin de ces
informations.

Sinon il faut utiliser un servlet d'initialisation qui sera chargé
d'instancier un singleton et d'y stocker tous les paramètres
d'initialisation de ton conteneur ...

Ainsi, tu pourras y accéder depuis n'importe quelle classe au sein de la
même JVM.

J'aime pas trop les singletons mais dans ce cas précis, je ne vois pas
trop d'autre solution.

A+

Symon



Zouplaz wrote:
Bonjour, encore une question !

J'ai une classe qui ne dérive pas de HttpServlet et donc n'a pas accès à la
méthode getInitParameter.

Comment puis-je lire une clé qui est dans web.xml ?

Mon besoin, tout simple, est de lire quelques informations propres à la
configuration de l'application (ex. <appmailserver>x.x.x.x<appmailserver/>.



Merci


Avatar
Zouplaz
Symon - :

Tu peux passer le Context en paramètre à la méthode qui a besoin de
ces informations.

Sinon il faut utiliser un servlet d'initialisation qui sera chargé
d'instancier un singleton et d'y stocker tous les paramètres
d'initialisation de ton conteneur ...

Ainsi, tu pourras y accéder depuis n'importe quelle classe au sein de
la même JVM.

J'aime pas trop les singletons mais dans ce cas précis, je ne vois pas
trop d'autre solution.



Justement je veux éviter de passer le Context parce que dans l'avenir les
paramètres seront peut être (et sans doute) stockés ailleurs (un fichier
.properties ou un .xml, va savoir...)...

Donc ta deuxième proposition me plait bien, sauf que je ne saisis pas bien
ce qu'est un "servlet d'initialisation" ? Concrètement ça se caractérise
par quoi ?


Et tant que j'y suis, pourquoi est-ce tu n'aimes pas les singletons ?

Avatar
David Molinier
Zouplaz - :


Bonjour, encore une question !

J'ai une classe qui ne dérive pas de HttpServlet et donc n'a pas accès
à la méthode getInitParameter.

Comment puis-je lire une clé qui est dans web.xml ?

Mon besoin, tout simple, est de lire quelques informations propres à
la configuration de l'application (ex.
<appmailserver>x.x.x.x<appmailserver/>.



Peut-être devrais-tu disposer dans ton application d'un "contexte
applicatif" ?

Tu écris une classe qui a accès au HttpServlet : elle lit les paramètres
utiles au reste de ton application, et les déclare dans un contexte que
tu devras mettre à disposition de tes autres classes : paramètre, classe
statique, etc... selon ta problématique d'architecture.

Mais si tu essaies de ruser pour qu'une classe qui n'a pas accès au
contexte Web arrive tout de même à directement y chercher de
l'information, alors ton archi aura perdu en robustesse, et en cohérence.

Enfin, si dans ton archi on trouve une base de données, tu peux aussi
imaginer stocker certaines informations dans celle-ci.

--
David Molinier <*>


Avatar
Symon
Ben si tu comptes utiliser un autre système pour le paramètrages de ton
application, autant swapper directement plutôt que de passer par une
phase intermédiaire, non ? La méthode pour les charger au démarrage de
ton application web sera la même de toutes façon (utilisation d'un
servlet d'initialisation).

Un "servlet d'initialisation" est un servlet qui est chargé au démarrage
du conteneur, on le met en place avec un tag "load-on-startup" dans la
déclaration des servlets du fichier web.xml, ensuite, la méthode init()
de se servlet est "automatiquement" appelée lors du démarrage du conteneur.

J'aime pas les singletons parcequ'on ne sait jamais vraiment quand ils
seront garbage collectés, alors j'évite un maximum de les utiliser...
Mais bon, une HashMap contenant quelques propriétés, ça ne te croquera
pas trop de mémoire !

A+

Symon



Justement je veux éviter de passer le Context parce que dans l'avenir les
paramètres seront peut être (et sans doute) stockés ailleurs (un fichier
.properties ou un .xml, va savoir...)...

Donc ta deuxième proposition me plait bien, sauf que je ne saisis pas bien
ce qu'est un "servlet d'initialisation" ? Concrètement ça se caractérise
par quoi ?


Et tant que j'y suis, pourquoi est-ce tu n'aimes pas les singletons ?


Avatar
Fabrice Bacchella
On Wed, 16 Feb 2005 22:49:35 +0100, Symon wrote:

Un "servlet d'initialisation" est un servlet qui est chargé au démarrage
du conteneur, on le met en place avec un tag "load-on-startup" dans la
déclaration des servlets du fichier web.xml, ensuite, la méthode init()
de se servlet est "automatiquement" appelée lors du démarrage du conteneur.


C'est pas mieux d'implémenter l'interface ServletContextListener et de
rajouter l'élément <listener> dans web.xml ?
--
www.castalie.fr

Avatar
Symon
Ouaip, les deux fonctionneront de toutes façons ! ;o)

Perso, je préfère utiliser un servlet d'initialisation dédié à
cette tâche... Mais c'est une question d'habitude.
Avatar
Zouplaz
Fabrice Bacchella - :

On Wed, 16 Feb 2005 22:49:35 +0100, Symon wrote:

Un "servlet d'initialisation" est un servlet qui est chargé au
démarrage du conteneur, on le met en place avec un tag
"load-on-startup" dans la déclaration des servlets du fichier web.xml,
ensuite, la méthode init() de se servlet est "automatiquement" appelée
lors du démarrage du conteneur.


C'est pas mieux d'implémenter l'interface ServletContextListener et de
rajouter l'élément <listener> dans web.xml ?


Je viens d'essayer et c'est pas mal du tout, j'ai un peu bataillé au début
mais ça tourne bien maintenant.
Du coup les paramètres de l'application sont stockés dans un fichier .xml
que je place à la racine et les clés sont tout simplement dans une hashmap
... Avec l'aide de 10 lignes de dom4j !

C'est cool tout ça quand même !