Servlets - 服务器HTTP响应

如前一章所述,当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.

设置HTTP响应标头

以下方法可用于在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)

设置状态此响应的代码

HTTP标头响应示例

您已经看到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