Servlet 3.1 响应 HTTP 请求

Java Servlet 使用 HttpServletResponse 类实例响应 HTTP 的请求

HTTP 响应

当一个 Web 服务器响应一个 HTTP 请求时,响应通常包括一个状态行、一些响应报头、一个空行和响应体

下面是 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 常用的响应报头

头信息 描述
Allow 指定服务器支持的请求方法(GET、POST 等)
Cache-Control 指定响应文档在何种情况下可以安全地缓存。可能的值有:public、private或no-cache等。Public 意味着文档是可缓存,Private 意味着文档是单个用户私用文档,且只能存储在私有(非共享)缓存中,no-cache 意味着文档不应被缓存
Connection 指示浏览器是否使用持久 HTTP 连接。值close指示浏览器不使用持久 HTTP 连接,值keep-alive意味着使用持久连接
Content-Disposition 可以让您请求浏览器要求用户以给定名称的文件把响应保存到磁盘
Content-Encoding 指定页面的编码方式
Content-Language 表示文档编写所使用的语言。例如,en、en-us、ru 等
Content-Length 指示响应中的字节数。只有当浏览器使用持久(keep-alive)HTTP 连接时才需要这些信息
Content-Type 提供了响应文档的 MIME(Multipurpose Internet Mail Extension)类型
Expires 指定内容过期的时间,在这之后内容不再被缓存
Last-Modified 指示文档的最后修改时间。然后,客户端可以缓存文件,并在以后的请求中通过If-Modified-Since请求头信息提供一个日期
Location 应被包含在所有的带有状态码的响应中。在 300s 内,这会通知浏览器文档的地址。浏览器会自动重新连接到这个位置,并获取新的文档
Refresh 指定浏览器应该如何尽快请求更新的页面。您可以指定页面刷新的秒数
Retry-After 可以与 503(Service Unavailable 服务不可用)响应配合使用,这会告诉客户端多久就可以重复它的请求
Set-Cookie 指定一个与页面关联的 cookie

设置 HTTP 响应报头的方法

Java Servlet HttpServletResponse 类提供了以下方法来设置 HTTP 响应报头

序号 方法 & 描述
1 String encodeRedirectURL(String url)
为 sendRedirect 方法中使用的指定的 URL 进行编码
2 String encodeURL(String url)
对包含 session 会话 ID 的指定 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)
为该响应设置状态码

范例

下面的范例演示了 Servlet 如何使用 setIntHeader() 方法来设置 Refresh 头信息,从而实现自动刷新页面

cn/twle/demo/RefreshServlet.java

// author: 简单教程(www.twle.cn)
// Copyright © 2015-2065 www.twle.cn. All rights reserved.

package cn.twle.demo;


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Calendar;
import java.util.GregorianCalendar;


@WebServlet(name = "RefreshServlet", urlPatterns = {"auto_refresh"}, loadOnStartup = 1) 
public class RefreshServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 设置刷新自动加载的事件间隔为 1 秒
        response.setIntHeader("Refresh", 1);

        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");

        // 获取当前的时间
        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 = "使用 Servlet 自动刷新页面 | 简单教程(www.twle.cn)";
        String docType = "<!DOCTYPE html> \n";
        out.println(docType +
            "<title>" + title + "</title>"+
            "<body bgcolor=\"#f0f0f0\">" +
            "<p>" + title + "</p>" +
            "<p>当前时间是:" + CT + "</p>");
    }

}

在浏览器上输入 http://localhost:8080/servlet/auto_refresh 来访问网页

这个网页会每隔 1 秒钟显示一次当前系统时间

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2018 简单教程 twle.cn All Rights Reserved.