如前一章所述,当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).
以下是从Web服务器端返回浏览器的最有用的HTTP 1.1响应标头的摘要,您可以在网络编程中经常使用它们并减去;
Sr.No. | 标题和描述 |
---|---|
1 | 允许 此标头指定服务器支持的请求方法(GET,POST等) . |
2 | 缓存控制 此标头指定可以安全地缓存响应文档的环境.它可以具有值公共,私有或无缓存等.公共意味着文档是可缓存的,私有意味着文档是针对单个用户的,并且可以只存储在私有(非共享)缓存中,而nocache意味着永远不应该缓存文档. |
3 | 连接 此标头指示浏览器是否在HTTP连接中使用持久性.值 close 指示浏览器不使用持久HTTP连接, keepalive 表示使用持久连接. |
4 | 内容 - 处置 此标题允许您请求浏览器要求用户将响应保存到给定名称的文件中. |
5 | 内容编码 此标题指定在传输过程中页面编码的方式. |
6 | 内容 - 语言 此标题表示文档的编写语言.例如en,en-us,ru等 |
7 | 内容长度 此标头指示字节数在回应中.仅当浏览器使用持久(保持活动)HTTP连接时才需要此信息. |
8 | 内容类型 此标题提供响应文档的MIME(多用途Internet邮件扩展)类型. |
9 | 过期 这header指定内容应被视为过期的时间,因此不再被缓存. |
10 | Last-Modified 此标题指示上次更改文档的时间.然后,客户端可以缓存文档,并在以后的请求中通过 If-Modified-Since 请求标头提供日期. |
11 | 位置 此标头应包含在状态代码为300s的所有响应中.这会通知浏览器文档地址.浏览器会自动重新连接到此位置并检索新文档. |
12 | 刷新 此标头指定浏览器的使用时间应该要求更新页面.您可以指定刷新页面的秒数. |
13 | Retry-After 此标题可以与503(服务不可用)响应一起使用,告诉客户它可以多快重复其请求. |
14 | Set-Cookie 此标头指定与页面关联的cookie. |
以下方法可用于在servlet程序中设置HTTP响应标头.这些方法可用于 HttpServletResponse 对象.
Sr.No. | 方法&描述 |
---|---|
1 | String encodeRedirectURL(String url) 对指定的URL进行编码,以便在sendRedirect方法中使用,或者,如果不需要编码,返回URL不变. |
2 | 字符串encodeURL(字符串网址) 通过将会话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()方法来设置刷新标头.
// 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 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并等待查看结果 :
自动刷新标题设置当前时间是:9:44:50 PM