Oracle知识—HTTP Servlet中持久化状态
2014-09-17来源:易贤网

HTTP协议的无状态

1. 在HTTP协议中无状态的优缺点

a) HTTP交互是无状态的

无状态是指,当浏览器发送请求给服务器的时候,服务器响应,但是同一个浏览器再发送请求给服务器的时候,他会响应,但是他不知道你就是刚才那个浏览器。

b) 优点

i. 客户浏览器不会注意到服务器出现故障并重启.

ii. 在服务器不需要先前信息时它的应答就较快

c) 缺点

i. 对于事务处理没有记忆能力,可能导致每次连接传送的数据量增大

ii. 很难产生收集信息去产生良好用户体验的一组页面.

2. HTTP如果有状态的好处

a) 减少数据的传送量

b) 认证网页可以收集用户的认证信息

c) 可以定义用户的对网页的访问权限

Cookie的原理和应用

1. Cookie

a) 定义:

是一种由服务器发送给客户的片段信息,存储在客户端浏览器的内在中或硬盘上,在客户随后对该服务器的请求中发回它。

b) Cookie规范:

i. Netscape规范(版本0):

ii. RFC2109(HTTP状态管理机制,版本1):http://www.ietf.org/rfc

c) 响应报头:

Set-Cookie: NAME=VALUE; Comment=value; Domain=value; Max-Age=value; Path=value; Secure; Version=1*DIGIT

d) 其他

Cookie中文译为小甜饼,是由Netscape公司发明的。Netscape公司也是最早开发浏览器的公司,在互联网刚刚发展的前期,它凭借着先入为主的优势Netscape也曾经成为最流行的浏览器。但由于windows95的普及,微软公司将IE浏览器与windows进行绑定销售,Netscape逐渐销声匿迹,不为人知了。但现在大多数的互联网协议与规范都源于Netscape公司的产品。Cookie就是其中之后。它是一种由服务器发送给客户的片段信息,它可以存储在客户端浏览器的内在中或硬盘上,然后在客户随后对该服务器的请求中发回它。Cookie目前遵循的规范主要是两种,一个就是Netscape规范,它的规范文件可以在找到。另一个是RFC2109,它的规范文件可以在上找到。这两个规范,规定了在HTTP协议中,关于cookie的报头的形式。比如,在RFC2109规范中,规定了响应报头的形式是这样子的。Name是cookie的名字,vlue是它的值。Name=value属性-值对必须首先出现,在此之后的属性值对可以以任何顺序出现。Comment属性是可选的,因为cookies可能包含关于用户私有的信息,这个属性允许服务器说明这个cookie的使用,用户可以检查这个信息,然后决定是否加入或继续会话。 Domain属性是可选的,用于指定Cookie在哪一个域有效,所指定的域必须以点号开始。Max-age属性是可选可的,用于定义Cookie的生存时间,以秒为单位,如果超过了这个时间,客户端应该丢弃这个cookie,如果指定的秒数为0,表示这个cookie应该立即被丢弃。Path属性是可选的,用于指定这个cookie在哪一个URL子集下有效。Secure属性是可选的,它没有值,用于指示浏览器使用安全的方式与服务器交互。Version属性是必需的,它的值是一个十进制的整数,标识cookie依照的状态管理规范的版本,对于RFC2109 Version应该设为1.

2. 使用Cookie编程

a) 特点

i. 以键-值对的方式记录会话跟踪的内容

ii. Cookie的持久性较高

iii. 用户可以手动限制cookie的使用

iv. Session可以用来替代Cookie

3. 设置一个Cookie

a) 创建cookie:

Cookie c = new Cookie("MyName", "MyValue");

b) Cookie的方法:

i. getConnment()、setComment(String purpose)

ii. getDomain()、setDomain(String pattern)

iii. getMaxAge()、setMaxAge(int expiry)

iv. getName()、getValue()

v. setValue(String newValue)

vi. getPath()、setpath(String uri)

c) 使用cookie

i. Response.addCookie()

ii. Request.getCoonkie()

4. 实例—登录程序

a) 功能:

i. 使用cookie来保存用户登录信息

ii. 初次登录,将信息保存到客户端的硬盘上

iii. 再次访问,先验证用户登录信息,通过后显示欢迎信息

b) 步骤:

i. 第一步:编写LoginServlet.java和GreetServlet.java

ii. 第二步:编译JAVA源文件

iii. 第三步:部署servlet

5. 实例—LoginSerlvet

6. 实例—GreetServlet

7. 向浏览器输出会话

a) Cookie

i. 跟踪跟浏览器有关的会话

ii. 有些浏览器不支持

iii. 有些用户由于安全原因不使用

b) 重写URL

i. 通过一个请求URL的会话ID把一个会话绑定到一个浏览器上

ii. 耗费时间去扫描页面和URL重定向

iii. 使用encodeURL()和encodeRedirectURL()

Session的原理和应用

1. Session

a) 定义:

i. 一个浏览器到一个服务器相关的HTTP交互的集合.

ii. 是被浏览器访问的Servlet获取的与那些交互相关的数据集合.

b) javax.servlet.http.HttpSession支持的接口.

2. HttpSession接口

a) HttpSession接口中的方法

i. public Object getAttribute(String name)

ii. public void setAttribute(String name,Object value)

iii. public void removeAttribute(String name)

iv. public int setMaxInactiveInterval()

v. public void invalidate()

3. 补充说明

a) Servlet运行就会创建会话.

b) Servlet可以通过下面的方法来获得session对象:

getSession()

c) 任何servlet可以请求创建会话.

d) 对处理目标浏览器中请求的所有Servlet都可以访问会话中的信息.

e) 会话会由于浏览器的不活跃而超时而失效。

4. Cookie和Session比较

a) session

i. 由服务器端创建

ii. 由服务端保存信息

iii. 打开新的浏览器,就会开始一次新的会话

b) Cookie

i. 由服务器发送给客户端的片段信息,存储在客户端浏览器的内存中或硬盘上。

ii. 由客户端保存信息

iii. 在cookie有效期间内,多个浏览器可访问同一个cookie对象

回顾Cookie和Session

Cookie在一个浏览器中存储一个变量和对应的值.

Cookie可以由浏览器用户配置.

不是所有的浏览器都支持Cookie.

可以使用addCookie()和getCookie ()方法获取Cookie.

session是由浏览器和网络服务器之间的交互所关联的数据集合.

每打开一个浏览器,就会创建一个新的session对象

会话开发时存在下列方法:

getSession()

setAttribute(key, value)

getAttribute(key)

更多信息请查看IT技术专栏

推荐信息