English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Wie in den vorherigen Kapiteln diskutiert, beinhaltet die Antwort eines Web-Servers auf eine HTTP-Anfrage in der Regel eine Statuszeile, einige Antwortkopfzeilen, eine Leerzeile und das Dokument. Ein typisches Beispiel für eine Antwort ist wie folgt:
HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (Leere Zeile) <!doctype ...> <html> <head>.../head> <body> ... </body> </html>
Die Statuszeile enthält die HTTP-Version (im Beispiel HTTP/1.1)、einen Statuscode (im Beispiel 200) und eine kurze Mitteilung, die dem Statuscode entspricht (im Beispiel OK).
Nachstehende Tabelle gibt eine Zusammenfassung der nützlichsten HTTP 1.1 Antwort-Header, die Sie in der Web-Programmierung häufig verwenden werden:
Header-Informationen | Beschreibung |
---|---|
Allow | Diese Header-Information spezifiziert die von dem Server unterstützten Anfragemethoden (GET, POST usw.). |
Cache-Control | Diese Header-Information spezifiziert, in welchen Fällen das Antwortdokument sicher zwischengespeichert werden kann. Mögliche Werte sind:public, private oder no-cache Public bedeutet, dass das Dokument zwischengespeichert werden kann, Private bedeutet, dass es ein einzelnes Benutzerdokument ist und nur im privaten (nicht gemeinsam genutzten) Cache gespeichert werden kann, no-cache bedeutet, dass das Dokument nicht im Cache gespeichert werden sollte. |
Connection | Diese Header-Information weist darauf hin, ob der Browser eine dauerhafte HTTP-Verbindung verwenden soll. Wert close weist darauf hin, dass der Browser keine dauerhafte HTTP-Verbindung verwenden soll, Wert keep-alive bedeutet die Verwendung einer dauerhaften Verbindung. |
Content-Disposition | Diese Header-Information ermöglicht es Ihnen, den Browser zu bitten, die Antwort in eine Datei mit dem angegebenen Namen auf dem Speicher zu speichern. |
Content-Encoding | Während des Übertragungsprozesses spezifiziert diese Header-Information die Kodierung des Dokuments. |
Content-Language | Diese Header-Informationen geben die Sprache an, in der das Dokument verfasst wurde. Zum Beispiel, en, en-us, ru und anderen. |
Content-Length | Diese Header-Informationen weisen auf die Anzahl der Bytes in der Antwort hin. Nur wenn der Browser eine dauerhafte (keep-alive)-nur für lebenslange (keep-alive) HTTP-Verbindungen erforderlich sind. |
Content-Type | Diese Header-Informationen liefern den MIME-Typ (Multipurpose Internet Mail Extension) des antwortenden Dokuments. |
Expires | Diese Header-Informationen spezifizieren das Ablaufdatum des Inhalts, nach dem der Inhalt nicht mehr im Cache gespeichert wird. |
Last-Modified | Diese Header-Informationen weisen auf das letzte Änderungsdatum des Dokuments hin. Dann kann der Client die Datei cachen und sie in zukünftigen Anfragen durch Wenn-Modified-Since Die Header-Informationen liefern ein Datum. |
Location | Diese Header-Informationen sollten in allen Antworten mit Statuscode enthalten sein. In 300s 内,这会通知浏览器文档的地址。浏览器会自动重新连接到这个位置,并获取新的文档。 |
Refresh | 这个头信息指定浏览器应该如何尽快请求更新的页面。您可以指定页面刷新的秒数。 |
Retry-After | 这个头信息可以与 503(Service Unavailable 服务不可用)响应配合使用,这会告诉客户端多久就可以重复它的请求。 |
Set-Cookie | 这个头信息指定一个与页面关联的 cookie。 |
下面的方法可用于在 Servlet 程序中设置 HTTP 响应报头。这些方法通过 HttpServletResponse 对象可用。
序号 | 方法 & 描述 |
---|---|
1 | String encodeRedirectURL(String url) 为 sendRedirect 方法中使用的指定的 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。 |
2 | String encodeURL(String url) 对包含 session 会话 ID 的指定 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。 |
3 | boolean containsHeader(String name) 返回一个布尔值,指示是否已经设置已命名的响应报头。 |
4 | boolean isCommitted() 返回一个布尔值,指示响应是否已经提交。 |
5 | void addCookie(Cookie cookie) 把指定的 cookie 添加到响应。 |
6 | void addDateHeader(String name, long date) 添加一个带有给定的名称和日期值的响应报头。 |
7 | void addHeader(String name, String value) 添加一个带有给定的名称和值的响应报头。 |
8 | void addIntHeader(String name, int value) 添加一个带有给定的名称和整数值的响应报头。 |
9 | void flushBuffer() 强制任何在缓冲区中的内容被写入到客户端。 |
10 | void reset() 清除缓冲区中存在的任何数据,包括状态码和头。 |
11 | void resetBuffer() 清除响应中基础缓冲区的内容,不清除状态码和头。 |
12 | void sendError(int sc) 使用指定的状态码发送错误响应到客户端,并清除缓冲区。 |
13 | void sendError(int sc, String msg) 使用指定的状态发送错误响应到客户端。 |
14 | void sendRedirect(String location) 使用指定的重定向位置 URL 发送临时重定向响应到客户端。 |
15 | void setBufferSize(int size) 为响应主体设置首选的缓冲区大小。 |
16 | void setCharacterEncoding(String charset) 设置被发送到客户端的响应的字符编码(MIME 字符集)例如,UTF-8。 |
17 | void setContentLength(int len) 设置在 HTTP Servlet 响应中的内容主体的长度,该方法设置 HTTP Content-Length 头。 |
18 | void setContentType(String type) 如果响应还未被提交,设置被发送到客户端的响应的内容类型。 |
19 | void setDateHeader(String name, long date) 设置一个带有给定的名称和日期值的响应报头。 |
20 | void setHeader(String name, String value) 设置一个带有给定的名称和值的响应报头。 |
21 | void setIntHeader(String name, int value) 设置一个带有给定的名称和整数值的响应报头。 |
22 | void setLocale(Locale loc) 如果响应还未被提交,设置响应的区域。 |
23 | void setStatus(int sc) 为该响应设置状态码。 |
您已经在前面的示例中看到 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>Die aktuelle Zeit ist:" + nowTime + "</p>\n"); } // Methode zum Verarbeiten von POST-Methodenrequests public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Der obige Testbeispiel befindet sich im Projekt TomcatTest und die zugehörige web.xml-Konfiguration lautet wie folgt:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet <!-- Klassenname --> <servlet-name>Refresh</servlet-name> <!-- im Paket --> <servlet-class>com.w3codebox.test.Refresh</servlet-class> </servlet> <servlet-mapping> <servlet-name>Refresh</servlet-name> <!-- besuchte Webseite --> <url-pattern>/TomcatTest/Refresh</url-pattern> </servlet-mapping> </web-app>
Jetzt rufen Sie den oberen Servlet auf, jede 5 Die Sekunde zeigt die aktuelle Systemzeit an. Wenn Sie Servlet ausführen und kurz warten, können Sie das folgende Ergebnis sehen: