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
Servlet的服务端响应的更多相关文章
- django中“url映射规则”和“服务端响应顺序”
1.django搜索路径 使用 import 语句时,Python 所查找的系统目录清单. 查看方式: import sys print sys.path ...
- day112:MoFang:种植园使用websocket代替http&服务端基于flask-socketio提供服务&服务端响应信息&种植园页面显示初始化
目录 1.种植园使用websocket代替http 2.服务端基于socket提供服务 3.服务端响应信息 4.种植园页面展示 1.种植园使用websocket代替http 我们需要完成的种植园,是一 ...
- ajax客户端请求与服务端响应浅谈
AJAX,即Asynchronous Javascript And XML,AJAX本质是在HTTP协议的基础上以异步的方式与服务器进行通信. 所谓的异步,是指某段程序执行不会阻塞其他程序执行,其表现 ...
- Photon Server 实现注册与登录(四) --- 服务端响应登陆和注册
前面已经整理过了服务端代码,MyGameServer.cs 和 ClientPeer.cs 对请求和响应进行了拆分.接下来处理对前端的响应 一.响应登陆请求 之前整理中,响应前端请求主要在类Clien ...
- JSP基础知识➣客户端请求与服务端响应(三)
JSP客户端请求 浏览器请求服务器端,信息头的一些重要内容,在以后的网络编程中将会经常见到这些信息: Accept:指定浏览器或其他客户端可以处理的MIME类型.它的值通常为 image/png 或 ...
- dubbo服务端响应超时错误一例记录
错误描述: Portlet J2AppsPortlet::QuickStartPortlet not available: Waiting server-side response timeout. ...
- 简单的node 服务端 响应get,返回json数据;
原文:http://blog.csdn.net/xn_28/article/details/50837019 const http = require('http'); const hostname ...
- 客户端(springmvc)调用netty构建的nio服务端,获得响应后返回页面(同步响应)
后面考虑通过netty做一个真正意义的简约版RPC框架,今天先尝试通过正常调用逻辑调用netty构建的nio服务端并同步获得返回信息.为后面做铺垫 服务端实现 我们先完成服务端的逻辑,逻辑很简单,把客 ...
- [译]servlet3.0与non-blocking服务端推送技术
Non-blocking(NIO)Server Push and Servlet 3 在我的前一篇文章写道如何期待成熟的使用node.js.假定有一个框架,基于该框架,开发者只需要定义协议及相关的ha ...
随机推荐
- iOS Programming Dynamic Type 2
iOS Programming Dynamic Type 2 You will need to update two parts of this view controller for ...
- Objective-C Memory Management 内存管理 2
Objective-C Memory Management 内存管理 2 2.1 The Rules of Cocoa Memory Management 内存管理规则 (1)When you c ...
- cal - 显示一个日历
总览 cal [-mjy ] [月份 [年份 ] ] 描述 Cal 显示一个简单的日历.. 如果没有指定参数, 则显示当前月份. 选项如下所列: -m 显示星期一作为一周的第一天.. (缺省为星期日. ...
- sql server使用的注意点及优化点 自备
1.字符类型建议采用varchar/nvarchar数据类型,并且禁止使用varchar(max).nvarchar(max) 2.金额货币建议采用money数据类型 (*) 3.自增长标识建议采用 ...
- 笔试算法题(48):简介 - A*搜索算法(A Star Search Algorithm)
A*搜索算法(A Star Search Algorithm) A*算法主要用于在二维平面上寻找两个点之间的最短路径.在从起始点到目标点的过程中有很多个状态空间,DFS和BFS没有任何启发策略所以穷举 ...
- 向数据库添加中文数据乱码的解决办法(本文使用spring-jdbcTemplate)
由于编码字符集的不同通常容易导致数据库中文乱码问题,如显示问号. 往往由以下三个方面所造成的 (一):数据库端字符集设置 1.安装mysql时,会有一个数据库编码设置,将其设置为utf-8 2.先设置 ...
- php实现短信验证
PHP实现短信验证的整体思路: 一.申请短信api ->申请网址https://s1.chanyoo.cn/login?url=%2f 二.编写核心代码(thinkPHP5) 示例: <? ...
- 解决mysql时区问题以及SSL问题
看了下网上的教程,觉得都太麻烦啦,这里推荐个简单的! 解决时区问题 只需要加上serverTimezone=UTC即可,如下: spring.datasource.url=jdbc:mysql://1 ...
- Python re模块 subprocess模块
re模块 内部实现不是Python 而是调用了c的库 re是什么 正则 表达 式子 就是一些带有特殊含义的符号或者符号的组合作用: 对字符串进行过滤 在一对字符串中找到所关心的内容 你就需要告诉计算机 ...
- Python使用Flask框架,结合Highchart,自定义基本上算是最全的导出菜单了
说用:引入export-data.js文件后,导出菜单中会自动显示出相应的导出选项,只需要在lang中换成中文名即可. 本实例除了包含系统自带的,还包括自定义的导出菜单等. html代码 <!D ...