以下内容引用自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. 使用VirtualBox的时候虚拟机无法ping通windows主机,但是主机可以ping通虚拟机

    问题原因是windows开启了防火墙导致的,将windows的防火墙关闭即可. 关闭windows防火墙后会有警告的信息出现,直接无视即可.

  2. React全家桶之一 react-router之高级

    使用query获取URL中的参数 //引入相关的依赖 const Page = props => <div> <h1>{props.location.query.mess ...

  3. yii项目开发配置

    Clone项目 git clone https://gitee.com/s***/dianshang.git 安装yii php ini 选择 [0] Development 安装扩展 copy co ...

  4. CREATE DOMAIN - 定义一个新域

    SYNOPSIS CREATE DOMAIN name [AS] data_type [ DEFAULT expression ] [ constraint [ ... ] ] where const ...

  5. Flask框架 之模版

    一.过滤器 safe:禁用转义: <p>{{ '<em>hello</em>' | safe }}</p> capitalize:把变量值的首字母转成大 ...

  6. Java集合(三)--Collection、Collections和Arrays

    Collection: Collection是集合类的顶级接口,提供了对集合对象进行基本操作的通用接口方法.Collection接口的意义是为各种具体的集合提供了最大化 的统一操作方式,其直接继承接口 ...

  7. 【东软实训】SQL多表链接

    如果一个查询同时涉及两个以上的表,则称之为链接查询,链接查询是关系数据库中最主要的查询,主要包括等值链接查询.非等值链接查询.自身链接查询.外链接查询和复合条件链接查询. 这篇博文我们来对多表链接进行 ...

  8. powerdesigner连接MySQL数据库时出现Non SQL Error : Could not load class com.mysql.jdbc.Driver

    Non SQL Error : Could not load class com.mysql.jdbc.Driver 这是因为powerdesigner 无法找到驱动所产生的 解决办法是:配置系统的c ...

  9. 洛谷——P1602 Sramoc问题

    P1602 Sramoc问题 $bfs$搜索 保证第一个搜到的符合条件的就是最小的 #include<bits/stdc++.h> #define N 110000 using names ...

  10. Linux思维导图之网络管理

    查漏补缺,理解概念,及时总结,欢迎拍砖. IP地址和MAC地址: 1.设计形态不同.IP地址是基于网络拓扑设计出来的,可以人为改动:而MAC地址是制造商烧录好的不能改动,网卡决定了MAC地址,是固定的 ...