以下内容引用自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

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

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

    1.django搜索路径 使用 import 语句时,Python 所查找的系统目录清单.      查看方式:         import sys        print sys.path   ...

  2. day112:MoFang:种植园使用websocket代替http&服务端基于flask-socketio提供服务&服务端响应信息&种植园页面显示初始化

    目录 1.种植园使用websocket代替http 2.服务端基于socket提供服务 3.服务端响应信息 4.种植园页面展示 1.种植园使用websocket代替http 我们需要完成的种植园,是一 ...

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

    AJAX,即Asynchronous Javascript And XML,AJAX本质是在HTTP协议的基础上以异步的方式与服务器进行通信. 所谓的异步,是指某段程序执行不会阻塞其他程序执行,其表现 ...

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

    前面已经整理过了服务端代码,MyGameServer.cs 和 ClientPeer.cs 对请求和响应进行了拆分.接下来处理对前端的响应 一.响应登陆请求 之前整理中,响应前端请求主要在类Clien ...

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

    JSP客户端请求 浏览器请求服务器端,信息头的一些重要内容,在以后的网络编程中将会经常见到这些信息: Accept:指定浏览器或其他客户端可以处理的MIME类型.它的值通常为 image/png 或 ...

  6. dubbo服务端响应超时错误一例记录

    错误描述: Portlet J2AppsPortlet::QuickStartPortlet not available: Waiting server-side response timeout. ...

  7. 简单的node 服务端 响应get,返回json数据;

    原文:http://blog.csdn.net/xn_28/article/details/50837019 const http = require('http'); const hostname ...

  8. 客户端(springmvc)调用netty构建的nio服务端,获得响应后返回页面(同步响应)

    后面考虑通过netty做一个真正意义的简约版RPC框架,今天先尝试通过正常调用逻辑调用netty构建的nio服务端并同步获得返回信息.为后面做铺垫 服务端实现 我们先完成服务端的逻辑,逻辑很简单,把客 ...

  9. [译]servlet3.0与non-blocking服务端推送技术

    Non-blocking(NIO)Server Push and Servlet 3 在我的前一篇文章写道如何期待成熟的使用node.js.假定有一个框架,基于该框架,开发者只需要定义协议及相关的ha ...

随机推荐

  1. Java集合框架源码(二)——hashSet

    注:本人的源码基于JDK1.8.0,JDK的版本可以在命令行模式下通过java -version命令查看. 在前面的博文(Java集合框架源码(一)——hashMap)中我们详细讲了HashMap的原 ...

  2. 黑马程序员----java基础:多线程

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ---- ...

  3. html中 accept 属性

    1.HTML <input> 标签的 accept 属性 在文件上传中使用 accept 属性,本例中的输入字段可以接受 GIF 和 JPEG 两种图像: <form> < ...

  4. 字符集匹配:\s 匹配一个空格,一边后面加量词表示多个空格,\s*表示0个以上空格,\s+表示1个以上空格,\s相当于[\f\r\n\t ]5种空白字符。

    字符集匹配:\s 匹配一个空格,一边后面加量词表示多个空格,\s*表示0个以上空格,\s+表示1个以上空格,\s相当于[\f\r\n\t ]5种空白字符.

  5. Handler和内部类的正确用法

    PS:本文摘抄自<Android高级进阶>,仅供学习使用 Android代码中涉及线程间通信的地方经常会使用Handler,典型的代码结构如下. public class HandlerA ...

  6. [NOI2005]聪聪与可可

    题目大意:有小a和小b,其中一个人到处乱走,每次走一步:另一个人抄近路逼近,每次1-2步.求期望路程. 整解:跑1000遍最短路/bfs,求两两距离,然后找从x逼近y第一步去哪,最后期望dp收场. d ...

  7. 漫谈WEB前端学习路线

  8. JavaScript中数据类型的转换规则

    JavaScript中数据类型的转换规则 制作人:全心全意 JavaScript是一种无类型语言,也就是说,在声明变量时无须指定数据类型,这使得JavaScript更具有灵活性和简单性. 在代码执行过 ...

  9. 树莓派 -- bcm2835 library (1)

    bcm2835 library提供了user space 操作IO的代码. 本文不涉及代码分析,先直观的按照user guide完成操作. 1. 在Raspberry中安装bcm2835 librar ...

  10. 2018/08/23 cstring中memset()函数的运用

    好多东西其实以前已经查过了,然后当时理解的还行,可是过段时间没用有些又会忘记,然后又去找资料又查,浪费了不少的时间和精力,所以,我,曾国强,今天起,要好好做笔记了! 今天复习第一个知识点,为什么要叫复 ...