• Home
  • Docker
  • Kubernetes
  • LLMs
  • Java
  • Ubuntu
  • Maven
  • Big Data
  • Archived
Servlet/JSP | ServletRequest
  1. Introduction
  2. Lire les paramètres de la requête http
    1. Utiliser les fonctions prédéfinies
    2. Récupérer les valeurs des paramètres à partir du corps de la requête http
  3. Entêtes de la requête (request headers)
  4. Cookies
  5. Associer des attributs au scope Request

  1. Introduction
    Quand le conteneur de servlets reçoit une requête http, il crée automatiquement un objet de type ServletRequest qui représente les détails de la requête http, à savoir le type de la méthode http de la requête et les paramètres, les entêtes, et les cookies de la requête http.

    Le conteneur de servlets envoie l'objet ServletRequest en paramètre à la méthode service() de la classe HttpServlet.
    Cette méthode redirige automatiquement à la méthode doHTTP_METHOD_NAME qui correspond au type de la méthode http de la requête (GET, POST, HEAD, OPTIONS, TRACE, PUT, et DELETE).

    Typiquement vous devez redéfinir la méthode doHTTP_METHOD_NAME dans la servlet pour écrire un code spécifique à votre servlet.
    Cependant les implémentations existantes des méthodes doOptions (), doTrace (), et doHead () dans la classe HttpServlet devront suffire pour répondre aux requêtes http OPTIONS, TRACE, et HEAD.
  2. Lire les paramètres de la requête http
    Les paramètres sont ajoutés manuellement dans l'URL (lien hypertexte) ou passés à travers un formulaire dont l'attribut « METHOD » a été initialisé à « GET » ou « POST ».
    1. Utiliser les fonctions prédéfinies
      • Enumeration<String> getParameterNames() :
        Cette fonction retourne une énumération représentant les noms de tous les paramètres de la requête.
        L'énumération va être vide au cas où aucun paramètre n'a été passé.
        Les noms des paramètres dans l'énumération sont uniques même si le formulaire HTML déclare plusieurs contrôles avec le même nom.

      • String getParameter(String) :
        Cette fonction prend le nom du paramètre comme argument et retourne une chaîne de caractères représentant la valeur du paramètre, ou éventuellement NULL si le paramètre n'existe pas.

        Dans le cas où le paramètre a plusieurs valeurs (le cas des cases à cocher, par exemple), la fonction retourne une seule valeur.
        Exemple :

        Si les deux cases à cocher sont marquées alors la chaîne de l'URL ressemblera à : http://localhost:8080/mywebapp/MyServlet1?myCheckbox1=0&myCheckbox1=1&mySubmit=Submit
        La fonction getParameter("myCheckbox1") retournera la valeur 0 ou 1, mais pas les deux.
        En fait, la valeur retournée sera égale à la première valeur du tableau retourné par la fonction String[] getParameterValues(String).

      • String[] getParameterValues(String) :
        Cette fonction prend le nom du paramètre comme argument et retourne un tableau de toutes les valeurs d'un paramètre, ou éventuellement NULL si le paramètre n'existe pas.
        Dans le cas de l'exemple ci-dessus, la fonction getParameterValues("myCheckbox1") retournera le tableau [0,1].

      • Map<String, String[]> getParameterMap() :
        Cette fonction retourne un objet de type Map (une table de hachage contenant des paires clé/valeur), où :
        - les clés sont les noms des paramètres (sont uniques) ;
        - et les valeurs associées à ces clés sont des tableaux contenants les valeurs de chaque paramètre.

        La table de hachage retournée va être vide au cas où aucun paramètre n'a été passé (testé avec Tomcat 7).

        La table de hachage retournée est immuable, donc il n'est pas permis d'ajouter, de modifier, ou de supprimer des éléments de cette table.
        Vous pouvez obtenir une erreur si vous essayer de modifier la valeur d'une clé de cette table, par exemple le code suivant getParameterMap().put("myCheckbox1", new String[1]) donnera cette erreur :

        Mais il est possible de modifier les valeurs du tableau d'une clé de la table, par exemple :

        Voici un exemple affiche les nom et valeurs des paramètres de la requête http (exemple du formulaire décrit ci-dessus)

        Résultat d'exécution du code :

    2. Récupérer les valeurs des paramètres à partir du corps de la requête http
      Il est possible de lire les valeurs des paramètres passés à travers un formulaire dont l'attribut « METHOD » a été initialisé à « POST » en accédant directement au corps de la requête http.
      • java.io.BufferedReader getReader() :
        Cette fonction permet de récupérer le corps de la requête sous une forme non-binaire.

      • ServletInputStream getInputStream() :
        Cette fonction permet de récupérer le corps de la requête sous une forme binaire.

      Vous pouvez utilise l'une ou l'autre fonction, mais pas les deux.
      Si vous utilisiez en premier la fonction getInputStream() et après getReader(), alors vous obtiendrez l'erreur suivante :
      Et si vous utilisiez en premier la fonction getReader() et après getInputStream(), alors vous obtiendrez l'erreur suivante :
      Voici un exemple qui affiche les nom et valeurs des paramètres de la requête http :

      Page HTML :

      Code Servlet :

      Résultat d'exécution du code :
  3. Entêtes de la requête (request headers)
    • Enumeration<String> getHeaderNames() :
      Retourne une énumération de tous les noms des en-têtes de la requête.
      Il est possible que le conteneur de servlets refuse l'accès à un en-tête, alors dans ce cas la valeur NULL peut être retournée.

    • String getHeader(String) :
      Retourne la valeur d'un en-tête de la requête.

    • Enumeration<String> getHeaders(String) :
      Retourne toutes les valeurs d'un en-tête de la requête.
      Il est possible que le conteneur de servlets refuse l'accès à un en-tête, alors dans ce cas la valeur NULL peut être retournée.

    • long getDateHeader(String) :
      Retourne la valeur (de type Date) d'un en-tête de la requête, ou éventuellement -1 si le paramètre n'existe pas.
      Cette fonction déclenche une exception java.lang.IllegalArgumentException si la valeur de l'entête ne peut être convertit à une date.

    • int getIntHeader(String) :
      Retourne la valeur (de type entier) d'un en-tête de la requête, ou éventuellement -1 si le paramètre n'existe pas.
      Cette fonction déclenche une exception java.lang.NumberFormatException si la valeur de l'entête ne peut être convertit à un entier.

  4. Cookies
    • Cookie[] getCookies() :
      Cette méthode retourne un tableau des cookies, ou NULL si aucun cookie n'est envoyé avec la requête http.

    Un cookie a :
    - un nom ;
    - une valeur unique ;
    - et d'autres attributs optionnels (date d'expiration, domaine, …).

    Le constructeur Cookie(String, String) construit un objet de type Cookie avec le nom et la valeur spécifiés dans les arguments du constructeur.
  5. Associer des attributs au scope Request
    Les attributs sont gérés par une MAP qui associe à chaque nom d'attribut un objet.
    Il est possible d'ajouter, supprimer, et lire la valeur d'un attribut.
    Les noms des attributs sont uniques dans une MAP, et il n'est pas possible d'avoir, donc, deux attributs avec le même nom dans la MAP.

    Voici les méthodes qui permettre de gérer les attributs du scope Request :

    • void setAttribute(String ATTRIBUTE_NAME, Object OBJ)
      - ATTRIBUTE_NAME : Nom de l'attribut qui sera mappé avec l'objet.
      - OBJ : si la valeur de ce paramètre est null, alors l'attribut sera supprimé (même effet que removeAttribute).

    • void removeAttribute(String ATTRIBUTE_NAME)
      - ATTRIBUTE_NAME : Nom de l'attribut à supprimer du scope Request.

    • Object getAttribute(String ATTRIBUTE_NAME)
      - Retourne l'objet associé à l'attribut ATTRIBUTE_NAME.
      - Retourne null si aucun attribut avec ce nom n'existe dans le scope Request.

    • Enumeration<String> getAttributeNames()
      - Retourne une énumération contenant les noms de tous les attributs du scope Request.
      - Retourne une énumération vide si aucun attributs n'existent dans le scope Request.

    Remarques concernant l'utilisation de ces méthodes :
    • Le nom de l'attribut peut être n'importe quelle chaîne de caractères. Mais il est conseillé de composer le nom de l'attribut par le nom du domaine et le nom de l'application web, par exemple "com.mtitek.MYWEBAPPLI.MYATTRIBUTENAME".

    • Il y a cependant des noms d'attributs qui sont réservés par la spécification Servlet et ne peuvent pas être utilisés. Cela concerne tous les noms qui sont préfixés par « java.* », « javax.* », et « sun.* ».

    • Il n'est pas possible d'avoir deux attributs avec le même nom ; si la méthode setAttribute est appelée avec un nom d'un attribut déjà existant, alors la valeur de ce dernier sera remplacée par la nouvelle valeur.

© 2025  mtitek