正如前面的章节中讨论的那样,当一个Web服务器响应一个HTTP请求的浏览器的响应通常包括一个状态行,一些响应报头,一个空行,和文档。一个典型的反应看起来像这样:
HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (Blank Line) <!doctype ...> <html> <head>...</head> <body> ... </body> </html>
状态行包含HTTP版本(HTTP/1.1的例子),一个状态代码(在本例中为200),并在很短消息对应的状态代码(例子中的OK)。
以下是总结了最有用的HTTP 1.1响应报头回到浏览器从Web服务器端,你会非常频繁地使用他们在网络编程:
报头 | 描述 |
---|---|
Allow | 这个头指定服务器支持的请求方法(GET,POST等)。 |
Cache-Control | 这个头指定响应文件在何种情况下可以安全地缓存。它可以的值有:public, private 或 no-cache等。公共意味着是可缓存的文件,是为单个用户私用文件只能存储在私有(非共享)缓存和缓存装置文件不应被缓存。 |
Connection | 这头指示浏览器是否使用持久HTTP连接或不是。其值接近指示浏览器使用持久HTTP连接,并保持活着的意味着使用永久连接。 |
Content-Disposition | 这头可以让你请求的浏览器要求用户在一个文件中给定的名称保存到磁盘。 |
Content-Encoding | 在传输过程中,这个头指定的页面编码的方式。 |
Content-Language | 该头表示写入的文件所用的语言。例如,en,EN-US等。 |
Content-Length | 此标头指示的响应中的字节数。只有当浏览器使用持久(保持活动状态)HTTP连接时需要这些信息。 |
Content-Type | 这个头提供了响应文件的MIME(多用途互联网邮件扩展)类型的。 |
Expires | 这个头指定的内容应考虑的日期,因此不再被缓存的时间。 |
Last-Modified | 此标头指示的文件的最后修改时间。然后,客户端可以缓存文件,并在以后的请求中的一个If-Modified-Since请求头提供一个日期。 |
Location | 这个头文件中应包含的所有反应,有一个状态代码的300s。这通知浏览器的文件的地址。浏览器会自动重新连接到这个位置,并获取新的文件。 |
Refresh | 这个头指定浏览器应该如何尽快要求更新的页面。您可以指定时间的秒数后的页面将被刷新。 |
Retry-After | 这头可以配合使用503(服务不可用)响应告诉客户端很快就可以重复它的要求。 |
Set-Cookie | 这个头指定一个与页面关联的Cookie。 |
有下面的方法可用于设置HTTP响应报头中的Servlet程序。这些方法是HttpServletResponse对象。
S.N. | 方法& 描述 |
---|---|
1 |
String encodeRedirectURL(String url) 用于在指定的URL进行编码sendRedirect方法或如果编码不是必需时,返回的URL不变。 |
2 |
String encodeURL(String url) 包括会话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()方法例子,下面的例子也用同样的方法,此外,我们会用usesetIntHeader()方法来设置刷新头。
// Import required java libraries import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; // Extend HttpServlet class public class Refresh extends HttpServlet { // Method to handle GET method request. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Set refresh, autoload time as 5 seconds response.setIntHeader("Refresh", 5); // Set response content type response.setContentType("text/html"); // Get current time - by www.gitbook.net 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 = "Auto Refresh Header Setting"; 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>Current Time is: " + CT + "</p>\n"); } // Method to handle POST method request. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
现在,调用上面的servlet会显示当前系统时间后,每隔5秒,如下所示。只要运行servlet看到的结果如下:
Auto Refresh Header SettingCurrent Time is: 9:44:50 PM |