Servlets - Réponse HTTP du serveur

Comme indiqué dans le chapitre précédent, lorsqu'un serveur Web répond à une requête HTTP, la réponse se compose généralement d'une ligne d'état, de certains en-têtes de réponse, d'une ligne vide et du document. Une réponse typique ressemble à ceci -

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
   (Blank Line)
<!doctype ...>
<html>
   <head>...</head>
   <body>
      ...
   </body>
</html>

La ligne d'état se compose de la version HTTP (HTTP / 1.1 dans l'exemple), d'un code d'état (200 dans l'exemple) et d'un message très court correspondant au code d'état (OK dans l'exemple).

Voici un résumé des en-têtes de réponse HTTP 1.1 les plus utiles qui retournent au navigateur du côté du serveur Web et que vous les utiliseriez très fréquemment dans la programmation Web -

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

Allow

Cet en-tête spécifie les méthodes de requête (GET, POST, etc.) que le serveur prend en charge.

2

Cache-Control

Cet en-tête spécifie les circonstances dans lesquelles le document de réponse peut être mis en cache en toute sécurité. Il peut avoir des valeurspublic, private ou no-cache etc. Public signifie que le document peut être mis en cache, Private signifie que le document est pour un seul utilisateur et ne peut être stocké que dans des caches privés (non partagés) et nocache signifie que le document ne doit jamais être mis en cache.

3

Connection

Cet en-tête indique au navigateur s'il doit utiliser ou non persistante dans les connexions HTTP. Une valeur declose indique au navigateur de ne pas utiliser de connexions HTTP persistantes et keepalive signifie utiliser des connexions persistantes.

4

Content-Disposition

Cet en-tête vous permet de demander au navigateur de demander à l'utilisateur d'enregistrer la réponse sur le disque dans un fichier du nom donné.

5

Content-Encoding

Cet en-tête spécifie la manière dont la page a été codée lors de la transmission.

6

Content-Language

Cet en-tête indique la langue dans laquelle le document est rédigé. Par exemple en, en-us, ru, etc.

sept

Content-Length

Cet en-tête indique le nombre d'octets dans la réponse. Ces informations ne sont nécessaires que si le navigateur utilise une connexion HTTP persistante (keep-alive).

8

Content-Type

Cet en-tête donne le type MIME (Multipurpose Internet Mail Extension) du document de réponse.

9

Expires

Cet en-tête spécifie l'heure à laquelle le contenu doit être considéré comme obsolète et donc ne plus être mis en cache.

dix

Last-Modified

Cet en-tête indique quand le document a été modifié pour la dernière fois. Le client peut alors mettre en cache le document et fournir une date par unIf-Modified-Since en-tête de demande dans les demandes ultérieures.

11

Location

Cet en-tête doit être inclus avec toutes les réponses qui ont un code d'état dans les 300. Cela informe le navigateur de l'adresse du document. Le navigateur se reconnecte automatiquement à cet emplacement et récupère le nouveau document.

12

Refresh

Cet en-tête spécifie à quel moment le navigateur doit demander une page mise à jour. Vous pouvez spécifier la durée en nombre de secondes après laquelle une page sera actualisée.

13

Retry-After

Cet en-tête peut être utilisé en conjonction avec une réponse 503 (Service non disponible) pour indiquer au client à quel moment il peut répéter sa demande.

14

Set-Cookie

Cet en-tête spécifie un cookie associé à la page.

Méthodes pour définir l'en-tête de réponse HTTP

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

N ° Sr. Méthode et description
1

String encodeRedirectURL(String url)

Encode l'URL spécifiée à utiliser dans la méthode sendRedirect ou, si l'encodage n'est pas nécessaire, renvoie l'URL inchangée.

2

String encodeURL(String url)

Encode l'URL spécifiée en y incluant l'ID de session ou, si l'encodage n'est pas nécessaire, renvoie l'URL inchangée.

3

boolean containsHeader(String name)

Renvoie une valeur booléenne indiquant si l'en-tête de réponse nommé a déjà été défini.

4

boolean isCommitted()

Renvoie une valeur booléenne indiquant si la réponse a été validée.

5

void addCookie(Cookie cookie)

Ajoute le cookie spécifié à la réponse.

6

void addDateHeader(String name, long date)

Ajoute un en-tête de réponse avec le nom et la valeur de date donnés.

sept

void addHeader(String name, String value)

Ajoute un en-tête de réponse avec le nom et la valeur donnés.

8

void addIntHeader(String name, int value)

Ajoute un en-tête de réponse avec le nom et la valeur entière donnés.

9

void flushBuffer()

Force tout contenu de la mémoire tampon à être écrit sur le client.

dix

void reset()

Efface toutes les données qui existent dans la mémoire tampon ainsi que le code d'état et les en-têtes.

11

void resetBuffer()

Efface le contenu du tampon sous-jacent dans la réponse sans effacer les en-têtes ou le code d'état.

12

void sendError(int sc)

Envoie une réponse d'erreur au client en utilisant le code d'état spécifié et en effaçant la mémoire tampon.

13

void sendError(int sc, String msg)

Envoie une réponse d'erreur au client en utilisant l'état spécifié.

14

void sendRedirect(String location)

Envoie une réponse de redirection temporaire au client à l'aide de l'URL d'emplacement de redirection spécifiée.

15

void setBufferSize(int size)

Définit la taille de tampon préférée pour le corps de la réponse.

16

void setCharacterEncoding(String charset)

Définit le codage de caractères (jeu de caractères MIME) de la réponse envoyée au client, par exemple, sur UTF-8.

17

void setContentLength(int len)

Définit la longueur du corps du contenu dans la réponse Dans les servlets HTTP, cette méthode définit l'en-tête HTTP Content-Length.

18

void setContentType(String type)

Définit le type de contenu de la réponse envoyée au client, si la réponse n'a pas encore été validée.

19

void setDateHeader(String name, long date)

Définit un en-tête de réponse avec le nom et la valeur de date donnés.

20

void setHeader(String name, String value)

Définit un en-tête de réponse avec le nom et la valeur donnés.

21

void setIntHeader(String name, int value)

Définit un en-tête de réponse avec le nom et la valeur entière donnés

22

void setLocale(Locale loc)

Définit les paramètres régionaux de la réponse, si la réponse n'a pas encore été validée.

23

void setStatus(int sc)

Définit le code d'état de cette réponse

Exemple de réponse d'en-tête HTTP

Vous avez déjà vu la méthode setContentType () fonctionner dans les exemples précédents et l'exemple suivant utiliserait également la même méthode, en plus nous utiliserions setIntHeader() méthode à définir Refresh entête.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Extend HttpServlet class
public class Refresh extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
   
      // Set refresh, autoload time as 5 seconds
      response.setIntHeader("Refresh", 5);
 
      // Set response content type
      response.setContentType("text/html");
 
      // Get current time
      Calendar calendar = new GregorianCalendar();
      String am_pm;
      int hour = calendar.get(Calendar.HOUR);
      int minute = calendar.get(Calendar.MINUTE);
      int second = calendar.get(Calendar.SECOND);
         
      if(calendar.get(Calendar.AM_PM) == 0)
         am_pm = "AM";
      else
         am_pm = "PM";
 
      String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
    
      PrintWriter out = response.getWriter();
      String title = "Auto Refresh Header Setting";
      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" +
         "<p>Current Time is: " + CT + "</p>\n"
      );
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Maintenant, appeler le servlet ci-dessus afficherait l'heure système actuelle toutes les 5 secondes comme suit. Exécutez simplement le servlet et attendez de voir le résultat -

Auto Refresh Header Setting

Current Time is: 9:44:50 PM