English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Réponse HTTP serveur Servlet

Comme discuté dans les chapitres précédents, lorsqu'un serveur Web répond à une requête HTTP, la réponse inclut 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 comme suit :

HTTP/1.1 200 OK
Content-Type: text/html
En-tête2: ...
...
HeaderN: ...
  (Ligne blanche)
<!doctype ...>
<html>
<head>...<//head>
<body>
...
</body>
</html>

La ligne d'état inclut la version HTTP (dans cet exemple, HTTP/1.1)、un code d'état (dans cet exemple, 200)et un message court correspondant au code d'état (dans cet exemple, OK).

Le tableau suivant résume les plus utiles HTTP 1.1 En-têtes de réponse, que vous utiliserez fréquemment dans le développement Web :

En-têtesDescription
AllowCette en-tête d'information spécifie les méthodes de requête prises en charge par le serveur (GET, POST, etc.).
Cache-ControlCette en-tête d'information spécifie les conditions dans lesquelles le document de réponse peut être sécurisément mis en cache. Les valeurs possibles incluent :public, private ou no-cache Public signifie que le document est un document en cache, Private signifie que le document est un document privé pour un utilisateur unique et ne peut être stocké que dans un cache privé (non partagé), no-cache signifie que le document ne doit pas être mis en cache.
ConnectionCette en-tête d'information indique si le navigateur utilise une connexion persistante HTTP. Valeur close indique que le navigateur ne doit pas utiliser de connexion persistante HTTP, valeur keep-alive signifie l'utilisation d'une connexion persistante.
Content-DispositionCette en-tête d'information permet de demander au navigateur de sauvegarder la réponse sur le disque sous un nom de fichier donné.
Content-EncodingPendant le transfert, cette en-tête d'information spécifie le mode d'encodage de la page.
Content-LanguageCette en-tête d'information indique la langue utilisée pour rédiger le document. Par exemple, en, en-us, ru, etc.
Content-LengthCette en-tête d'information indique le nombre d'octets dans la réponse. Seulement lorsque le navigateur utilise une connexion persistante (keep-alive)HTTP connection est nécessaire pour ces informations.
Content-TypeCette en-tête d'information fournit le type MIME (Multipurpose Internet Mail Extension) du document de réponse.
ExpiresCette en-tête d'information spécifie le moment où le contenu expire et ne doit plus être mis en cache.
Last-ModifiedCette en-tête d'information indique la dernière modification du document. Ensuite, le client peut mettre en cache le fichier et utiliser Si-Modified-Depuis Les informations d'en-tête de la requête fournissent une date.
LocationCette en-tête d'information doit être incluse dans toutes les réponses avec un code d'état. 300s 内,这会通知浏览器文档的地址。浏览器会自动重新连接到这个位置,并获取新的文档。
Refresh这个头信息指定浏览器应该如何尽快请求更新的页面。您可以指定页面刷新的秒数。
Retry-After这个头信息可以与 503(Service Unavailable 服务不可用)响应配合使用,这会告诉客户端多久就可以重复它的请求。
Set-Cookie这个头信息指定一个与页面关联的 cookie。

设置 HTTP 响应报头的方法

下面的方法可用于在 Servlet 程序中设置 HTTP 响应报头。这些方法通过 HttpServletResponse 对象可用。

序号方法 & 描述
1String encodeRedirectURL(String url)
为 sendRedirect 方法中使用的指定的 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。
2String encodeURL(String url)
对包含 session 会话 ID 的指定 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。
3boolean containsHeader(String name)
返回一个布尔值,指示是否已经设置已命名的响应报头。
4boolean isCommitted()
返回一个布尔值,指示响应是否已经提交。
5void addCookie(Cookie cookie)
把指定的 cookie 添加到响应。
6void addDateHeader(String name, long date)
添加一个带有给定的名称和日期值的响应报头。
7void addHeader(String name, String value)
添加一个带有给定的名称和值的响应报头。
8void addIntHeader(String name, int value)
添加一个带有给定的名称和整数值的响应报头。
9void flushBuffer()
强制任何在缓冲区中的内容被写入到客户端。
10void reset()
清除缓冲区中存在的任何数据,包括状态码和头。
11void resetBuffer()
清除响应中基础缓冲区的内容,不清除状态码和头。
12void sendError(int sc)
使用指定的状态码发送错误响应到客户端,并清除缓冲区。
13void sendError(int sc, String msg)
使用指定的状态发送错误响应到客户端。
14void sendRedirect(String location)
使用指定的重定向位置 URL 发送临时重定向响应到客户端。
15void setBufferSize(int size)
为响应主体设置首选的缓冲区大小。
16void setCharacterEncoding(String charset)
设置被发送到客户端的响应的字符编码(MIME 字符集)例如,UTF-8。
17void setContentLength(int len)
设置在 HTTP Servlet 响应中的内容主体的长度,该方法设置 HTTP Content-Length 头。
18void setContentType(String type)
如果响应还未被提交,设置被发送到客户端的响应的内容类型。
19void setDateHeader(String name, long date)
设置一个带有给定的名称和日期值的响应报头。
20void setHeader(String name, String value)
设置一个带有给定的名称和值的响应报头。
21void setIntHeader(String name, int value)
设置一个带有给定的名称和整数值的响应报头。
22void setLocale(Locale loc)
如果响应还未被提交,设置响应的区域。
23void setStatus(int sc)
为该响应设置状态码。

HTTP Header 响应示例

您已经在前面的示例中看到 setContentType() 方法,下面的示例也使用了同样的方法,此外,我们会用 setIntHeader() 方法来设置 Refresh 头。

//导入必需的 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 设置 - 基础教程网示例";
          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>L'heure actuelle est :" + nowTime + "</p>\n");
      }
      // méthode pour traiter les requêtes de méthode POST
      public void doPost(HttpServletRequest request,
                         HttpServletResponse response)
          throws ServletException, IOException {
         doGet(request, response);
      }
}

Les exemples de tests ci-dessus se trouvent sous le projet TomcatTest, la configuration correspondante web.xml est la suivante :

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
  <servlet  
     <!-- nom de la classe -->  
    <servlet-name>Refresh</servlet-name>  
    <!-- le paquet où il se trouve -->  
    <servlet-class>com.w3codebox.test.Refresh</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>Refresh</servlet-name>  
    <!-- l'adresse du site visité -->  
    <url-pattern>/TomcatTest/Refresh</url-pattern>  
    </servlet-mapping>  
</web-app>

Maintenant, appeler le Servlet ci-dessus, toutes les 5 La seconde affiche l'heure système actuelle. Il suffit de lancer Servlet et d'attendre quelques instants pour voir les résultats suivants :