web-dev-qa-db-fra.com

Obtention des paramètres init dans une servlet

Je suis nouveau sur les servlets. J'ai obtenu les paramètres init en DD dans la méthode init() en utilisant getInitParameter ("nom"). J'ai beaucoup essayé depuis la méthode doGet() pour accéder aux paramètres init, mais elle renvoie toujours null.

J'ai essayé avec

getServletContext().getInitParametr("name")

et avec

getServletConfig().getInitParametr("name")

mais ils renvoient tous null. Puis-je obtenir les paramètres init dans la doGet()?

26
Shameer

La réponse est - Oui, vous pouvez .

OK, en plus du commentaire JB Nizet voici quelques suggestions.

1) Avez-vous ajouté vos paramètres init pendant que Web Container / Application Server était en cours d'exécution?

Citation de " Serveurs Head First et JSP: Réussite à l'examen de développeur de composants Web certifiés Sun" :

Les paramètres d'initialisation du servlet sont en lecture seule UNE FOIS - lorsque le conteneur initialise le servlet . ...
Lorsque le conteneur crée une servlet, il lit le DD et crée les paires nom/valeur pour ServletConfig. Le conteneur ne lit plus jamais les paramètres init! Une fois que les paramètres sont dans le ServletConfig, , ils ne seront pas relus tant que/sauf si vous redéployez le servlet .


2) Il existe deux types de paramètres init disponibles. Une autre citation de " Head First Servlets et JSP" (c'est moi qui souligne):

Il existe paramètres d'initialisation de contexte (définis dans l'élément <context-param>) Et paramètres d'initialisation de servlet (défini dans l'élément <init-param>). Ils sont tous deux appelés paramètres init, bien que définis dans différents éléments.

  • Context Les paramètres init sont disponibles pour toute servlet ou JSP faisant partie de l'application Web actuelle.

  • Servlet Les paramètres init sont disponibles uniquement pour le servlet pour lequel le <init-param> A été configuré.

  • Context Les paramètres init sont définis dans l'élément <web-app>.

  • Servlet Les paramètres init sont définis dans l'élément <servlet> pour chaque servlet spécifique .


Exemple:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://Java.Sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee
                        http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <display-name>Servlet testing app</display-name>

    <!-- This is a context init parameter -->
    <context-param>
        <param-name>email</param-name>
        <param-value>[email protected]</param-value>
    </context-param>

    <servlet>
        <servlet-name>Info Servlet</servlet-name>
        <servlet-class>com.example.InfoServlet</servlet-class>
        <!-- This is a servlet init parameter -->
        <init-param>
            <param-name>name</param-name>
            <param-value>John Doe</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>Info Servlet</servlet-name>
        <url-pattern>/test/ShowInfo.do</url-pattern>
    </servlet-mapping>

</web-app>


  • Accès au paramètre d'initialisation du contexte dans une servlet:
    getServletContext().getInitParameter(“email”);
  • Accès au paramètre init du servlet dans un servlet pour lequel il a été défini dans le descripteur de déploiement :
    getServletConfig().getInitParameter("name");

Une autre façon d'obtenir le paramètre init de la servlet consiste à utiliser une méthode définie dans la classe abstraite GenericServlet :
public String getInitParameter(String name);
Cette méthode est fournie pour plus de commodité. Il obtient la valeur du paramètre nommé à partir de l'objet ServletConfig du servlet.

Et il y a aussi la méthode Enumeration<String> getInitParameterNames() pour les deux ServletContext et ServletConfig to obtenir tous les paramètres d'initialisation .

69
informatik01

si vous avez remplacé la méthode init () par défaut, assurez-vous de lui passer le paramètre de configuration Servlet et d'appeler également la méthode super init. car si vous ne le faites pas, il est impossible que votre code trouve la configuration de votre servlet.

voici le code du servlet init ():

   public void init(ServletConfig config) throws ServletException {
    super.init(config);
    // Rest of your code ...
    }

j'ai également remarqué que vous avez utilisé Servlet version 3, je ne sais pas s'il prend en charge la définition de balises de servlet, donc si la solution ci-dessus fonctionne, essayez également de supprimer les attributs de l'application Web.

8
Mr.Q