JSP 服务器响应

  • 服务器响应

    在本章中,我们将讨论JSP中的服务器响应。当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服务器返回到浏览器。这些标头经常在Web编程中使用-
    标头 描述
    Allow 此标头指定服务器支持的请求方法(GET,POST等)。
    Cache-Control 此标头指定可以安全地缓存响应文档的情况。它可以具有值public,private或no-cache等。Public意味着文档是可缓存的,Private意味着文档是针对单个用户的,并且只能存储在私有(非共享)缓存中,并且no-cache意味着文档永远不应被缓存。
    Connection 此标头指示浏览器是否使用持久性HTTP连接。 close值指示浏览器不要使用持久性HTTP连接,而保持活动则是使用持久性连接。
    Content-Disposition 此标头可让您请求浏览器要求用户将响应保存到磁盘上给定名称的文件中。
    Content-Encoding 此标头指定在传输期间对页面进行编码的方式。
    Content-Language 此标头表示编写文档所用的语言。例如,en,en-us,ru等。
    Content-Length 此标头指示响应中的字节数。仅当浏览器使用持久性(保持活动)HTTP连接时,才需要此信息。
    Content-Type 此标头提供了响应文档的MIME(多用途Internet邮件扩展名)类型。
    Expires 此标头指定应将内容视为过期并因此不再被缓存的时间。
    Last-Modified 此标题指示文档的最后更改时间。然后,客户端可以缓存文档,并在以后的请求中通过If-Modified-Since请求标头提供日期。
    Location 此标头应包含在状态码为300的所有响应中。这会将文件地址通知浏览器。浏览器将自动重新连接到该位置并检索新文档。
    Refresh 此标头指定浏览器应多久请求更新的页面。您可以以秒为单位指定时间,之后刷新页面。
    Retry-After 此标头可以与503(服务不可用)响应一起使用,以告知客户端它可以在多长时间内重复其请求。
    Set-Cookie 该标题指定与页面关联的cookie
  • HttpServletResponse 对象

    response对象是javax.servlet.http.HttpServletResponse对象的实例。正如服务器创建请求对象一样,它也创建一个对象来表示对客户端的响应。响应对象还定义了用于处理创建新HTTP标头的接口。通过此对象,JSP程序员可以添加新的cookie或日期戳,HTTP状态代码等。可以使用以下方法在servlet程序中设置HTTP响应标头。这些方法可用于HttpServletResponse对象。该对象代表服务器响应。
    方法 描述
    String encodeRedirectURL(String url) 编码指定的URL以在sendRedirect方法中使用,或者,如果不需要编码,则返回不变的URL。
    String encodeURL(String url) 通过在其中包含会话ID对指定的URL进行编码,或者,如果不需要编码,则返回不变的URL。
    boolean containsHeader(String name) 返回一个布尔值,指示是否已设置命名响应头。
    boolean isCommitted() 返回一个布尔值,指示是否已提交响应。
    void addCookie(Cookie cookie) 将指定的cookie添加到响应中。
    void addDateHeader(String name, long date) 添加具有给定名称和日期值的响应标头。
    void addHeader(String name, String value) 添加具有给定名称和值的响应头。
    void addIntHeader(String name, int value) 添加具有给定名称和整数值的响应标头。
    void flushBuffer() 强制将缓冲区中的任何内容写入客户端。
    void reset() 清除缓冲区中存在的所有数据以及状态代码和标头。
    void resetBuffer() 清除响应中基础缓冲区的内容,而不清除标头或状态码。
    void sendError(int sc) 使用指定的状态代码并清除缓冲区,将错误响应发送给客户端。
    void sendError(int sc, String msg) 使用指定的状态将错误响应发送到客户端。
    void sendRedirect(String location) 使用指定的重定向位置URL向客户端发送临时重定向响应。
    void setBufferSize(int size) 设置响应主体的首选缓冲区大小。
    void setCharacterEncoding(String charset) 将发送到客户端的响应的字符编码(MIME字符集)设置为例如UTF-8。
    void setContentLength(int len) 设置HTTP Servlet响应中内容主体的长度;此方法还设置HTTP Content-Length标头。
    void setContentType(String type) 如果尚未提交响应,则设置发送给客户端的响应的内容类型。
    void setDateHeader(String name, long date) 设置具有给定名称和日期值的响应标头。
    void setHeader(String name, String value) 使用给定的名称和值设置响应头。
    void setIntHeader(String name, int value) 用给定的名称和整数值设置响应头。
    void setLocale(Locale loc) 设置响应的语言环境(如果尚未提交响应)。
    void setStatus(int sc) 设置此响应的状态码。
  • HTTP标头响应示例

    以下示例将使用setIntHeader()方法设置Refresh标头以模拟数字时钟-
    
    <%@ page import = "java.io.*,java.util.*" %>
    
    <html>
       
       <head>
          <title>Auto Refresh Header Example</title>
       </head>
       
       <body>
          <center>
             <h2>Auto Refresh Header Example</h2>
             <%
                // Set refresh, autoload time as 5 seconds
                response.setIntHeader("Refresh", 5);
                
                // 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;
                   out.println("Current Time is: " + CT + "\n");
             %>
          </center>
       
       </body>
    </html>
    
    尝试一下
    现在将上面的代码放在main.jsp中,并尝试访问它。每隔5秒将显示当前系统时间,如下所示。运行JSP。您将收到以下输出:-
    
    Auto Refresh Header Example
    
    Current Time is: 9:44:50 PM
    
    您可以尝试以类似方式尝试其他方法。