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 ...
随机推荐
- 迅为I.MX6Q开发板配不同分辨率不同尺寸液晶屏幕
I.MX6Q开发板: 核心板参数 尺寸:51mm*61mm iMX6Q四核CPU:Freescale Cortex-A9 四核 i.MX6Q,主频 1.2 GHz iMX6DL双核CPU:Freesc ...
- shellinabox的安装使用
一.简介 Shell In A Box(发音是shellinabox)是一款基于Web的终端模仿器,由Markus Gutschke开辟而成.它有内置的Web办事器,在指定的端口上作为一个基于Web的 ...
- pycharm 编写前端代码一些小技巧
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...
- MySQL操作数据库和表的基本语句(DDL)
1.创建数据库: CREATE DATABASE 数据库名; eg.CREATE DATABASE test_ddl;2.创建表 CREATE TABLE 表名(列名 数据类型 约束,...); eg ...
- window10换系统为windows7
第一步 第二步 第三步 下载系统:http://www.dnxtc.net 1.GHO镜像安装器和WIN7,GHO文件必须一起放在除C盘外的其他盘的根目录 2.“GHO镜像安装器“工具上右键管理员方式 ...
- 16.04 下 ufw 防火墙的的开启、禁用、开放端口、关闭端口
16.04 下的 ufw 防火墙相关操作使用ufw命令.通过ufw --help可以查看所有相关命令. 打开防火墙 sudo ufw enable 重启防火墙 sudo ufw reload 打开指定 ...
- ms_sql 触发器记录表字段数据变化的日志 -针对一张表操作
create table sto (id int not null, -- 主键字段 de datetime -- 被跟踪的字段 constraint pk_sto primary key(id)) ...
- C++ STL容器之 stack
STL 中的 stack 是一种容器适配器,而不是一种容器. 它是容器适配器是指,只要支持一系列方法的容器(empty, size, back, push_back, pop_back),都能作为st ...
- Yii 2.0版本调试输出SQL语句
项目是基于框架Yii 2.0开发的. 今天梳理一些数据统计功能代码的时候,想把当前运行的sql语句打印出来,然后放到navicat工具里面运行,并分析一下运行效率和调优方案,之前大部分时候都是写增加. ...
- 初识 Bootstrap
Bootstrap 概述 Bootstrap 是一个前端框架,使用它可以快速开发响应式页面,还能专门针对 PC 端或移动端快速开发,大大提高了开发效率. Bootstrap 是最受欢迎的 HTML.C ...