Réponse HTTP du serveur de servlet
Comme indiqué dans la section précédente, lorsqu'un serveur Web répond à une requête HTTP, la réponse comprend généralement une ligne d'état, des en-têtes de réponse, une ligne vide et de la documentation. 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 comprend la version HTTP (dans ce cas HTTP/1.1), un code d'état (dans ce cas 200) et une courte chaîne correspondant au code d'état. (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, que vous utiliserez fréquemment en programmation Web :
头信息 | 描述 |
---|---|
Allow | 这个头信息指定服务器支持的请求方法(GET、POST 等)。 |
Cache-Control | 这个头信息指定响应文档在何种情况下可以安全地缓存。可能的值有:public、private 或 no-cache 等。Public 意味着文档是可缓存,Private 意味着文档是单个用户私用文档,且只能存储在私有(非共享)缓存中,no-cache 意味着文档不应被缓存。 |
Connection | 这个头信息指示浏览器是否使用持久 HTTP 连接。值 close 指示浏览器不使用持久 HTTP 连接,值 keep-alive 意味着使用持久连接。 |
Content-Disposition | 这个头信息可以让您请求浏览器要求用户以给定名称的文件把响应保存到磁盘。 |
Content-Encoding | 在传输过程中,这个头信息指定页面的编码方式。 |
Content-Language | 这个头信息表示文档编写所使用的语言。例如,en、en-us、ru 等。 |
Content-Length | 这个头信息指示响应中的字节数。只有当浏览器使用持久(keep-alive)HTTP 连接时才需要这些信息。 |
Content-Type | 这个头信息提供了响应文档的 MIME(Multipurpose Internet Mail Extension)类型。 |
Expires | 这个头信息指定内容过期的时间,在这之后内容不再被缓存。 |
Last-Modified | 这个头信息指示文档的最后修改时间。然后,客户端可以缓存文件,并在以后的请求中通过 If-Modified-Since 请求头信息提供一个日期。 |
Location | 这个头信息应被包含在所有的带有状态码的响应中。在 300s 内,这会通知浏览器文档的地址。浏览器会自动重新连接到这个位置,并获取新的文档。 |
Refresh | 这个头信息指定浏览器应该如何尽快请求更新的页面。您可以指定页面刷新的秒数。 |
Retry-After | 这个头信息可以与 503(Service Unavailable 服务不可用)响应配合使用,这会告诉客户端多久就可以重复它的请求。 |
Set-Cookie | 这个头信息指定一个与页面关联的 cookie。 |
Méthodes de définition des en-têtes de réponse HTTP
Les méthodes suivantes peuvent être utilisées pour définir les en-têtes de réponse HTTP dans les programmes Servlet. Ces méthodes sont disponibles via l'objet HttpServletResponse.
Numéro de série | Méthode et description |
---|---|
1 | String encodeRedirectURL(String url ) Encodez l'URL spécifiée pour l'utiliser dans la méthode sendRedirect, ou si l'encodage n'est pas requis, renvoyez l'URL inchangée. |
2 | String encodeURL(String url) Encodez l'URL spécifiée contenant l'ID de session, ou si l'encodage n'est pas requis, l'URL renvoyée reste inchangée. |
3 | boolean containHeader(String name) Renvoie une valeur booléenne indiquant si l'en-tête de réponse nommé a été défini. |
4 | boolean isComended() 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 une réponse avec le nom donné et l'en-tête de la valeur de date. |
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 une réponse avec le nom donné et l'en-tête de valeur entière. |
9 | void flushBuffer() Force l'écriture de tout ce qui se trouve dans le tampon sur le client. |
10 | void reset() Efface toutes les données présentes dans le tampon, y compris les codes d'état et les en-têtes. |
11 | void resetBuffer() Effacer le contenu du tampon sous-jacent dans la réponse, mais n'effacez pas 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 efface 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 l'emplacement de redirection spécifié. |
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éfinissez l'encodage des caractères (jeu de caractères MIME) de la réponse envoyée au client, par ex. , UTF-8. |
17 | void setContentLength(int len) Définissez la longueur du corps du contenu dans la réponse du servlet HTTP. l'en-tête HTTP Content-Length. |
18 | void setContentType(String type) Définir le contenu de la réponse envoyée au client si la réponse n'a pas été soumis encore taper. |
19 | void setDateHeader (nom de chaîne, date longue) 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éfinissez un en-tête de réponse avec le nom et la valeur donnés. |
21 | void setIntHeader(String name, int value) Définit une réponse avec le nom donné et l'en-tête de valeur entière. |
22 | void setLocale(Locale loc) Si la réponse n'a pas encore été soumise, définissez 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 vu la méthode setContentType() dans l'exemple précédent, et la même est utilisée dans l'exemple suivant Méthode, en plus, nous utiliserons la méthode setIntHeader() pour définir l'en-tête Refresh.
// 导入必需的 java 库 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; // 扩展 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"); // 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 = "自动刷新 Header 设置"; 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>当前时间是:" + CT + "</p>\n"); } // 处理 POST 方法请求的方法 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Maintenant, appelez le servlet ci-dessus et l'heure actuelle du système sera affichée toutes les 5 secondes. Exécutez simplement le servlet et attendez un moment, et vous verrez les résultats suivants :
自动刷新 Header 设置当前时间是:9:44:50 PM |