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ête | Description |
|---|---|
| Allow | Cet en-tête spécifie les méthodes de requête (GET, POST, etc.) prises en charge par le serveur. |
| Cache-Control | Cet 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. |
| Connexion | Cet 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-Disposition | Cet 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-Encoding | Pendant la transmission, cet en-tête spécifie l'encodage de la page. |
| Content-Language | Cet en-tête indique la langue dans laquelle le document a été rédigé. Par exemple, en, en-us, ru, etc. |
| Content-Length | Cet 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-Type | Cet en-tête fournit le type MIME (Multipurpose Internet Mail Extension) du document de réponse. |
| Expires | Cet en-tête spécifie le moment où le contenu expire, après quoi le contenu n'est plus mis en cache. |
| Last-Modified | Cet 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. |
| Emplacement | Cet 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. |
| Actualiser | Cet 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-After | Cet 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-Cookie | Cet 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 |
|---|---|
| 1 | String 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. |
| 2 | String 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. |
| 3 | boolean containsHeader(String name) Renvoie un booléen indiquant si l'en-tête de réponse nommé a déjà été défini. |
| 4 | boolean isCommitted() Renvoie un booléen 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. |
| 7 | 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 l'écriture vers le client de tout contenu présent dans le tampon. |
| 10 | void reset() Efface toutes les données présentes dans le tampon, y compris 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 le code d'état et les en-têtes. |
| 12 | void sendError(int sc) Envoie une réponse d'erreur au client en utilisant le code d'état spécifié et vide le tampon. |
| 13 | void sendError(int sc, String msg) Envoie une réponse d'erreur au client en utilisant le statut spécifié. |
| 14 | void sendRedirect(String location) Envoie une réponse de redirection temporaire au client en utilisant l'URL 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 l'encodage des caractères (charset MIME) de la réponse envoyée au client, par exemple, UTF-8. |
| 17 | void 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. |
| 18 | void 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. |
| 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) Si la réponse n'a pas été engagée, définit les paramètres régionaux de la réponse. |
| 23 | void 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 :
