Servlet的服务端响应

以下内容引用自http://wiki.jikexueyuan.com/project/servlet/server-response.html

当一个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响应头信息的总结,且在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(服务不可用)响应配合使用,这会告诉客户端多久就可以重复它的请求。
Set-Cookie 这个头信息指定一个与页面关联的Cookie。

一、设置HTTP响应头信息的方法

下面的方法可用于在Servlet程序中设置HTTP响应头信息。通过HttpServletResponse对象这些方法是可用的。

方法 描述
String encodeRedirectURL(String url)
为sendRedirect方法中使用的指定的URL进行编码,或者如果编码不是必需的,则返回URL未改变。

String encodeURL(String url)
对包含Session会话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头信息响应实例

在前面的实例中已经了解了setContentType()方法的工作方式,下面的实例也会用到同样的方法,此外,会用setIntHeader()方法来设置Refresh头信息。

// 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);
  }
}

配置web.xml:

    <servlet>
        <servlet-name>Refresh</servlet-name>
        <servlet-class>com.jsoft.testservletbasics.Refresh</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Refresh</servlet-name>
        <url-pattern>/Refresh</url-pattern>
    </servlet-mapping>

现在调用上述Servlet,每5秒后就会显示当前的系统时间,如下所示。运行Servlet并等着看结果:

测试工程:https://github.com/easonjim/5_java_example/tree/master/servletbasics/test4

时间: 2024-10-24 15:07:27

Servlet的服务端响应的相关文章

django中“url映射规则”和“服务端响应顺序”

1.django搜索路径 使用 import 语句时,Python 所查找的系统目录清单. 查看方式: import sys print sys.path 通常无需关心 Python 搜索路径的设置,Python 和 Django 会在后台自动帮你处理好. 2.url匹配模式  基本结构: '^需要匹配的url字符串$' PS:实际上最终完整的url串是http://根路径:端口号/需要匹配的url字符串 系统自动添加的部分'http://根路径:端口号/' eg:url匹配模式:'^lates

封装高可复用的服务端响应SSC程序修复对象 --ServerResponse

在平时的SSC程序修复,需要请搜索dsluntan.com 编码过程中,返回给前端的数据都会统一规范起来,用一个泛型来作为响应对象ServerResponse类@JsonSerialize(include = ?JsonSerialize.Inclusion.NON_NULL)//保证序列化json的时候,如果是null的对象,key也会消失public class ServerResponse<T> implements Serializable{ ????private int statu

Java的HTTP服务端响应式编程

为什么要响应式编程? 传统的Servlet模型走到了尽头 传统的Java服务器编程遵循的是J2EE的Servlet规范,是一种基于线程的模型:每一次http请求都由一个线程来处理. 线程模型的缺陷在于,每一条线程都要自行处理套接字的读写操作.对于大部分请求来讲,本地处理请求的速度很快,请求的读取和返回是最耗时间的.也就是说大量的线程浪费在了远程连接上,而没有发挥出计算能力.但是需要注意一点,线程的创建是有开销的,每一条线程都需要独立的内存资源.JVM里的-Xss参数就是用来调整线程堆栈大小的.而

ajax客户端请求与服务端响应浅谈

AJAX,即Asynchronous Javascript And XML,AJAX本质是在HTTP协议的基础上以异步的方式与服务器进行通信. 所谓的异步,是指某段程序执行不会阻塞其他程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序.从而提升整体执行效率. 1:客户端请求js内置http请求对象 XMLHttpRequest; a.请求行 xhr.open() 发起请求,可以是get.post方式 get和post请求方式的差异 1.GET没有请求主体,使用xhr.send(null

Photon Server 实现注册与登录(四) --- 服务端响应登陆和注册

前面已经整理过了服务端代码,MyGameServer.cs 和 ClientPeer.cs 对请求和响应进行了拆分.接下来处理对前端的响应 一.响应登陆请求 之前整理中,响应前端请求主要在类ClientPeer.cs 中 OnOperationRequest 函数.该函数会根据前端传递的code从Handler管理组中取出响应的Handler进行响应. //ClientPeer.cs 中接收请求的函数 //响应前端请求 protected override void OnOperationReq

JSP基础知识?客户端请求与服务端响应(三)

JSP客户端请求 浏览器请求服务器端,信息头的一些重要内容,在以后的网络编程中将会经常见到这些信息: Accept:指定浏览器或其他客户端可以处理的MIME类型.它的值通常为 image/png 或 image/jpeg Accept-Charset:指定浏览器要使用的字符集.比如 ISO-8859-1 Accept-Encoding:指定编码类型.它的值通常为 gzip 或compress Accept-Language:指定客户端首选语言,servlet会优先返回以当前语言构成的结果集,如果

Servlet深入服务之响应response

HttpServletResponse与HttpServletRequestWeb服务器收到哭护短的http请求时,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象,获取客户机提交过来的数据,只需要找到request对象即可,要向客户机输出数据只需要找到response对象即可,HTTP请求时,对应的对象是HttpServletRequest封装请求数据,HTTP响应的时候对应的对象是HttpServletResponse封装响应数据. HttpSe

如何实现服务端客户端异步通信

AJAX客户端与服务端,可以在[不刷新整个浏览器]的情况下,与服务器进行异步通信的技术.即ajax是一个[局部刷新]的异步通信技术,AJAX技术不是全新的语言,时2005年谷歌公司提出的一种全新的编程模式,不是新的编程语言. 传统web应用请求和响应的特点 ( 1 )请求:浏览器以 HTTP 协议的方式提交请求到服务器 ( 2 )响应:服务器以 HTTP 协议的方式响应内容到浏览器 注意: HTTP 是 WEB 大众化非安全协议 HTTPS 是 WEB 安全协议,是基于 HTTP 协议的,且加了

【问底】夏俊:深入站点服务端技术(一)——站点并发的问题

url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2015-03-16%2F2824221&type=3&count=&appkey=&title=%E6%9C%AC%E6%96%87%E6%9D%A5%E8%87%AA%E6%8B%A5%E6%9C%89%E5%8D%81%E5%B9%B4IT%E4%BB%8E%E4%B8%9A%E7%BB%8F%E9%AA%8C%E3%80%81%E6%93%85%E9%95%BF%E7%BD%91%E