Servlets - Requête HTTP client

Lorsqu'un navigateur demande une page Web, il envoie beaucoup d'informations au serveur Web qui ne peuvent pas être lues directement car ces informations voyagent dans le cadre de l'en-tête de la requête HTTP. Vous pouvez consulter le protocole HTTP pour plus d'informations à ce sujet.

Voici les informations d'en-tête importantes provenant du navigateur et que vous utiliseriez très fréquemment dans la programmation Web -

N ° Sr. En-tête et description
1

Accept

Cet en-tête spécifie les types MIME que le navigateur ou d'autres clients peuvent gérer. Valeurs deimage/png ou image/jpeg sont les deux possibilités les plus courantes.

2

Accept-Charset

Cet en-tête spécifie les jeux de caractères que le navigateur peut utiliser pour afficher les informations. Par exemple ISO-8859-1.

3

Accept-Encoding

Cet en-tête spécifie les types d'encodages que le navigateur sait gérer. Valeurs degzip ou compress sont les deux possibilités les plus courantes.

4

Accept-Language

Cet en-tête spécifie les langues préférées du client au cas où le servlet peut produire des résultats dans plusieurs langues. Par exemple en, en-us, ru, etc.

5

Authorization

Cet en-tête est utilisé par les clients pour s'identifier lorsqu'ils accèdent à des pages Web protégées par mot de passe.

6

Connection

Cet en-tête indique si le client peut gérer les connexions HTTP persistantes. Les connexions persistantes permettent au client ou à un autre navigateur de récupérer plusieurs fichiers avec une seule demande. Une valeur deKeep-Alive signifie que des connexions persistantes doivent être utilisées.

sept

Content-Length

Cet en-tête n'est applicable qu'aux requêtes POST et donne la taille des données POST en octets.

8

Cookie

Cet en-tête renvoie les cookies aux serveurs qui les ont précédemment envoyés au navigateur.

9

Host

Cet en-tête spécifie l'hôte et le port comme indiqué dans l'URL d'origine.

dix

If-Modified-Since

Cet en-tête indique que le client veut la page uniquement si elle a été modifiée après la date spécifiée. Le serveur envoie un code, 304 ce qui signifieNot Modified en-tête si aucun résultat plus récent n'est disponible.

11

If-Unmodified-Since

Cet en-tête est l'inverse de If-Modified-Since; il spécifie que l'opération ne doit réussir que si le document est plus ancien que la date spécifiée.

12

Referer

Cet en-tête indique l'URL de la page Web de référence. Par exemple, si vous êtes sur la page Web 1 et que vous cliquez sur un lien vers la page Web 2, l'URL de la page Web 1 est incluse dans l'en-tête Referrer lorsque le navigateur demande la page Web 2.

13

User-Agent

Cet en-tête identifie le navigateur ou un autre client effectuant la demande et peut être utilisé pour renvoyer différents contenus à différents types de navigateurs.

Méthodes pour lire l'en-tête HTTP

Les méthodes suivantes peuvent être utilisées pour lire l'en-tête HTTP dans votre programme de servlet. Ces méthodes sont disponibles avec l' objet HttpServletRequest

N ° Sr. Méthode et description
1

Cookie[] getCookies()

Renvoie un tableau contenant tous les objets Cookie que le client a envoyés avec cette demande.

2

Enumeration getAttributeNames()

Renvoie une énumération contenant les noms des attributs disponibles pour cette demande.

3

Enumeration getHeaderNames()

Renvoie une énumération de tous les noms d'en-tête que contient cette demande.

4

Enumeration getParameterNames()

Renvoie une énumération d'objets String contenant les noms des paramètres contenus dans cette requête

5

HttpSession getSession()

Renvoie la session actuelle associée à cette demande, ou si la demande n'a pas de session, en crée une.

6

HttpSession getSession(boolean create)

Renvoie la HttpSession actuelle associée à cette demande ou, s'il n'y a pas de session en cours et que la valeur de create est true, renvoie une nouvelle session.

sept

Locale getLocale()

Renvoie les paramètres régionaux préférés dans lesquels le client acceptera le contenu, en fonction de l'en-tête Accept-Language.

8

Object getAttribute(String name)

Renvoie la valeur de l'attribut nommé en tant qu'objet, ou null si aucun attribut du nom donné n'existe.

9

ServletInputStream getInputStream()

Récupère le corps de la demande sous forme de données binaires à l'aide d'un ServletInputStream.

dix

String getAuthType()

Renvoie le nom du schéma d'authentification utilisé pour protéger le servlet, par exemple «BASIC» ou «SSL», ou null si le JSP n'était pas protégé.

11

String getCharacterEncoding()

Renvoie le nom du codage de caractères utilisé dans le corps de cette requête.

12

String getContentType()

Renvoie le type MIME du corps de la requête, ou null si le type n'est pas connu.

13

String getContextPath()

Renvoie la partie de l'URI de la demande qui indique le contexte de la demande.

14

String getHeader(String name)

Renvoie la valeur de l'en-tête de demande spécifié sous forme de chaîne.

15

String getMethod()

Renvoie le nom de la méthode HTTP avec laquelle cette requête a été effectuée, par exemple GET, POST ou PUT.

16

String getParameter(String name)

Renvoie la valeur d'un paramètre de demande sous forme de chaîne, ou null si le paramètre n'existe pas.

17

String getPathInfo()

Renvoie toutes les informations de chemin supplémentaires associées à l'URL que le client a envoyée lors de cette demande

18

String getProtocol()

Renvoie le nom et la version du protocole de la demande.

19

String getQueryString()

Renvoie la chaîne de requête contenue dans l'URL de la requête après le chemin.

20

String getRemoteAddr()

Renvoie l'adresse IP (Internet Protocol) du client qui a envoyé la demande.

21

String getRemoteHost()

Renvoie le nom complet du client qui a envoyé la demande.

22

String getRemoteUser()

Renvoie le login de l'utilisateur qui fait cette demande, si l'utilisateur a été authentifié, ou null si l'utilisateur n'a pas été authentifié.

23

String getRequestURI()

Renvoie la partie de l'URL de cette requête depuis le nom du protocole jusqu'à la chaîne de requête dans la première ligne de la requête HTTP.

24

String getRequestedSessionId()

Renvoie l'ID de session spécifié par le client.

25

String getServletPath()

Renvoie la partie de l'URL de cette requête qui appelle la JSP.

26

String[] getParameterValues(String name)

Renvoie un tableau d'objets String contenant toutes les valeurs du paramètre de demande donné, ou null si le paramètre n'existe pas.

27

boolean isSecure()

Renvoie une valeur booléenne indiquant si cette demande a été effectuée à l'aide d'un canal sécurisé, tel que HTTPS.

28

int getContentLength()

Renvoie la longueur, en octets, du corps de la requête et mis à disposition par le flux d'entrée, ou -1 si la longueur n'est pas connue.

29

int getIntHeader(String name)

Renvoie la valeur de l'en-tête de demande spécifié sous la forme d'un entier.

30

int getServerPort()

Renvoie le numéro de port sur lequel cette demande a été reçue.

Exemple de demande d'en-tête HTTP

Voici l'exemple qui utilise getHeaderNames() method of HttpServletRequest to read the HTTP header information. This method returns an Enumeration that contains the header information associated with the current HTTP request.

Once we have an Enumeration, we can loop down the Enumeration in the standard manner, using hasMoreElements() method to determine when to stop and using nextElement() method to get each parameter name

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Extend HttpServlet class
public class DisplayHeader extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "HTTP Header Request Example";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n"+
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<table width = \"100%\" border = \"1\" align = \"center\">\n" +
         "<tr bgcolor = \"#949494\">\n" +
         "<th>Header Name</th><th>Header Value(s)</th>\n"+
         "</tr>\n"
      );
 
      Enumeration headerNames = request.getHeaderNames();
    
      while(headerNames.hasMoreElements()) {
         String paramName = (String)headerNames.nextElement();
         out.print("<tr><td>" + paramName + "</td>\n");
         String paramValue = request.getHeader(paramName);
         out.println("<td> " + paramValue + "</td></tr>\n");
      }
      out.println("</table>\n</body></html>");
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      doGet(request, response);
   }
}

Now calling the above servlet would generate the following result −

HTTP Header Request Example

Header Name Header Value(s)
accept */*
accept-language en-us
user-agent Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)
accept-encoding gzip, deflate
host localhost:8080
connection Keep-Alive
cache-control no-cache