Réponse HTTP du serveur Servlet

Comme indiqué dans les chapitres précédents, lorsqu'un serveur web répond à une requête HTTP, la réponse comprend généralement une ligne de statut, quelques en-têtes de réponse, une ligne vide et un document. Une réponse typique est présentée ci-dessous :

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

La ligne de statut comprend la version HTTP (HTTP/1.1 dans ce cas), un code de statut (200 dans ce cas) et un court message correspondant au code de statut (OK dans ce cas).

Le tableau suivant résume les en-têtes de réponse HTTP 1.1 les plus utiles renvoyés par le serveur web au navigateur. Vous les utiliserez fréquemment en programmation web :

En-têteDescription
AllowCet en-tête spécifie les méthodes de requête (GET, POST, etc.) prises en charge par le serveur.
Cache-ControlCet en-tête spécifie dans quelles circonstances le document de réponse peut être mis en cache en toute sécurité. Les valeurs possibles sont :public, privateouno-cacheetc. Public signifie que le document peut être mis en cache, Private signifie que le document est un document privé d'un seul utilisateur et ne peut être stocké que dans un cache privé (non partagé), et no-cache signifie que le document ne doit pas être mis en cache.
ConnexionCet en-tête indique si le navigateur utilise une connexion HTTP persistante. La valeurcloseindique que le navigateur n'utilise pas de connexion HTTP persistante, et la valeurkeep-alivesignifie que l'on utilise une connexion persistante.
Content-DispositionCet en-tête vous permet de demander au navigateur d'inviter l'utilisateur à enregistrer la réponse sur le disque en tant que fichier portant le nom donné.
Content-EncodingPendant la transmission, cet en-tête spécifie l'encodage de la page.
Content-LanguageCet en-tête indique la langue dans laquelle le document a été rédigé. Par exemple, en, en-us, ru, etc.
Content-LengthCet en-tête indique le nombre d'octets dans la réponse. Cette information n'est nécessaire que lorsque le navigateur utilise une connexion HTTP persistante (keep-alive).
Content-TypeCet en-tête fournit le type MIME (Multipurpose Internet Mail Extension) du document de réponse.
ExpiresCet en-tête spécifie le moment où le contenu expire, après quoi le contenu n'est plus mis en cache.
Last-ModifiedCet en-tête indique l'heure de dernière modification du document. Le client peut alors mettre le fichier en cache et, dans les requêtes suivantes, fournir une date via l'en-tête de requêteIf-Modified-Since.
EmplacementCet en-tête doit être inclus dans toutes les réponses avec un code de statut. Dans la plage des 300, cela indique au navigateur l'adresse du document. Le navigateur se reconnectera automatiquement à cet emplacement et récupérera le nouveau document.
ActualiserCet en-tête spécifie dans combien de temps le navigateur doit demander une page mise à jour. Vous pouvez spécifier le nombre de secondes avant que la page ne se rafraîchisse.
Retry-AfterCet en-tête peut être utilisé avec la réponse 503 (Service Unavailable) pour indiquer au client combien de temps il doit attendre avant de répéter sa requête.
Set-CookieCet en-tête spécifie un cookie associé à la page.

Méthodes pour définir les en-têtes de réponse HTTP

Les méthodes suivantes peuvent être utilisées pour définir des en-têtes de réponse HTTP dans un programme Servlet. Ces méthodes sont disponibles via l'objetHttpServletResponse.

Non.Metode & Deskripsi
1String encodeRedirectURL(String url)
Encode l'URL spécifiée utilisée dans la méthode sendRedirect, ou renvoie l'URL inchangée si l'encodage n'est pas nécessaire.
2String encodeURL(String url)
Encode l'URL spécifiée qui contient l'ID de session, ou renvoie l'URL inchangée si l'encodage n'est pas nécessaire.
3boolean containsHeader(String name)
Renvoie un booléen indiquant si l'en-tête de réponse nommé a déjà été défini.
4boolean isCommitted()
Renvoie un booléen indiquant si la réponse a été validée.
5void addCookie(Cookie cookie)
Ajoute le cookie spécifié à la réponse.
6void addDateHeader(String name, long date)
Ajoute un en-tête de réponse avec le nom et la valeur de date donnés.
7void addHeader(String name, String value)
Ajoute un en-tête de réponse avec le nom et la valeur donnés.
8void addIntHeader(String name, int value)
Ajoute un en-tête de réponse avec le nom et la valeur entière donnés.
9void flushBuffer()
Force l'écriture vers le client de tout contenu présent dans le tampon.
10void reset()
Efface toutes les données présentes dans le tampon, y compris le code d'état et les en-têtes.
11void resetBuffer()
Efface le contenu du tampon sous-jacent dans la réponse sans effacer le code d'état et les en-têtes.
12void sendError(int sc)
Envoie une réponse d'erreur au client en utilisant le code d'état spécifié et vide le tampon.
13void sendError(int sc, String msg)
Envoie une réponse d'erreur au client en utilisant le statut spécifié.
14void sendRedirect(String location)
Envoie une réponse de redirection temporaire au client en utilisant l'URL de redirection spécifiée.
15void setBufferSize(int size)
Définit la taille de tampon préférée pour le corps de la réponse.
16void setCharacterEncoding(String charset)
Définit l'encodage des caractères (charset MIME) de la réponse envoyée au client, par exemple, UTF-8.
17void setContentLength(int len)
Définit la longueur du corps de contenu dans la réponse HTTP du Servlet. Cette méthode définit l'en-tête HTTP Content-Length.
18void setContentType(String type)
Si la réponse n'a pas été engagée, définit le type de contenu de la réponse envoyée au client.
19void setDateHeader(String name, long date)
Définit un en-tête de réponse avec le nom et la valeur de date donnés.
20void setHeader(String name, String value)
Définit un en-tête de réponse avec le nom et la valeur donnés.
21void setIntHeader(String name, int value)
Définit un en-tête de réponse avec le nom et la valeur entière donnés.
22void setLocale(Locale loc)
Si la réponse n'a pas été engagée, définit les paramètres régionaux de la réponse.
23void setStatus(int sc)
Définit le code d'état pour cette réponse.

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

Vous avez déjà vu la méthode setContentType() dans les exemples précédents. L'exemple suivant utilise également la même méthode. De plus, nous allons utiliser la méthodesetIntHeader()pour définir l'en-têteRefresh.

//导入必需的 java 库
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Refresh")

//扩展 HttpServlet 类
public class Refresh extends HttpServlet {

    // 处理 GET 方法请求的方法
      public void doGet(HttpServletRequest request,
                        HttpServletResponse response)
                throws ServletException, IOException
      {
          // 设置刷新自动加载时间为 5 秒
          response.setIntHeader("Refresh", 5);
          // 设置响应内容类型
          response.setContentType("text/html;charset=UTF-8");
         
          //使用默认时区和语言环境获得一个日历  
          Calendar cale = Calendar.getInstance();  
          //将Calendar类型转换成Date类型  
          Date tasktime=cale.getTime();  
          //设置日期输出的格式  
          SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
          //格式化输出  
          String nowTime = df.format(tasktime);
          PrintWriter out = response.getWriter();
          String title = "自动刷新 Header 设置 - Example实例";
          String docType =
          "<!DOCTYPE html>\n";
          out.println(docType +
            "<html>\n" +
            "<head><title>" + title + "</title></head>\n"+
            "<body bgcolor=\"#F0F0F0\">\n" +
            "<h1 align=\"center\">" + title + "</h1>\n" +
            "<p>当前时间是:" + nowTime + "</p>\n");
      }
      // 处理 POST 方法请求的方法
      public void doPost(HttpServletRequest request,
                         HttpServletResponse response)
          throws ServletException, IOException {
         doGet(request, response);
      }
}

L'exemple de test ci-dessus se trouve dans le projet TomcatTest, et la configuration web.xml correspondante est :

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
  <servlet>  
     <!-- 类名 -->  
    <servlet-name>Refresh</servlet-name>  
    <!-- 所在的包 -->  
    <servlet-class>com.example.test.Refresh</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>Refresh</servlet-name>  
    <!-- 访问的网址 -->  
    <url-pattern>/TomcatTest/Refresh</url-pattern>  
    </servlet-mapping>  
</web-app> 

Maintenant, appeler le Servlet ci-dessus affichera l'heure système actuelle toutes les 5 secondes. Il suffit d'exécuter le Servlet et d'attendre un instant, et vous verrez le résultat suivant :

Autres extensions