状态管理概述
Cookie
Session
URL重写
 
状态管理概述:
HTTP协议使用的是无状态的连接
对容器而言,每一个请求都来自于一个新的客户
这里我们有四种方法来解决这个状态:
a:表单隐藏字段
b:Cookie
c:  Session
d:  URL重写
 
我们就来一一介绍这四种方案:
A:状态管理解决方案-表单隐藏字段
   表单隐藏字段:
<input type="hidden" name="session"  value=""/>

1:对用户在网站上的访问进行会话跟踪。

2:为服务器端程序提供预定义的输入。

3:存储动态产生的页面上下文信息。

隐藏字段存在一个主要的缺点,即只有每当每个页面都是动态生成的时候才有效。

B:表单是在生成动态时才有效,那么我们就使用HTTP Cookie来固定的保存在某个地方,需要是读取。

使用HTTP Cookie可以很好的维护和保留用户的状态信息,但是Cookie涉及到一些敏感的隐私问题,一些用户会禁用Cookie,这时我们需要另一个方法来解决

C:URL重写

D:Servlet提供了出色的解决方案,HttpSessionAPI,这种高级接口建立在Cookie和URL重写之上。

把客户的状态信息保存在服务器端

Session对象就是服务器为客户端创建并维护的用于存放客户状态数据的对象

一:Cookie

1:Cookie原理:

服务器在响应请求时将一些数据以“键-值”对的形式通过响应信息保存在客户端,当浏览器再次访问相同的应用时,会将原先的Cookie通过请求信息带到服务器端。

Cookie cookie = new Cookie("cool", "tiger!");

response.addCookie(cookie);

2:在Serlvet中管理Cookie

Servlet中提供了如下一系列操作Cookie的API
–Cookie(name, value):构造方法用于创建一个或多个Cookie
–setMaxAge(int lifetime):设置Cookie的过期时间(以秒为单位)。默认值为负值(Cookie将在浏览器关闭时过期)
–getMaxAge():获取Cookie的过期时间。
–getName():获取Cookie的名字
–setValue(String value):指定Cookie的值。
–getValue():获取Cookie的值
-.......
 
3:在Servlet中使用Cookie
要将Cookie发送到客户端,Servlet应该按照下列的操作步骤执行:
–创建一个或多个Cookie,使用构造方法指定Cookie的名字和值
–使用setXXX方法为Cookie设置属性值
–使用HttpServletResponse对象的addCookie()方法将Cookie插入到响应头中
要读取客户端传入的Cookie,Servlet执行下列操作步骤:
–使用HttpServletRequest对象的getCookie方法返回一个Cookie对象数组
–Servlet遍历该数组(调用getName()方法),直到找到与名称相匹配的Cookie值
 
 
 
二:Session
1:Session原理
-服务器可以为客户端创建并维护一个Session对象,用于存放数据。
-在创建Session对象的同时,服务器将会为该 Session对象产生一个唯一编号,这个编号称之为SessionID
-服务器以Cookie的方式将SessionID存放在客户端。
-当浏览器再次访问该服务器时,会将SessionID作为Cookie信息带到服务器,服务器可以通过该SessionID检索到以前的Session对象,并对其进行访问
 
2:Session工作流程
 
3:Session会话跟踪机制
 
用户发送请求

HttpSession session = request.getSession(); //getSession(false)方法使用已经存在的会话,而不必创建新会话

服务器的响应
再次发送请求
4:HttpSessoin接口
HttpSession接口常用的一些方法
–setAttribute(java.lang.String, java.lang.Object):在Session对象中用一个名字绑定一个对象。
–getAttribute(java.lang.String):通过名字获取Session对象中保存的对象。
–removeAttribute(java.lang.String):在Session中删除与一个名字对应的对象。
–getCreationTime():返回第一次创建会话的时间。
–getLastAccessedTime():返回容器最后一次得到该会话ID的请求时间。
–setMaxInactiveInterval(int interval):对于会话指定客户请求的最大间隔时间,以秒为单位。-1表示永不过期
–getMaxInactiveInterval(int interval):返回客户请求的最大间隔时间。
–invalidate():会话结束,当前存在在会话中的所有会话属性也会解除绑定。
–getId():此方法返回每个session唯一的标识 
-......
5:会话超时管理
销毁会话可以采用如下三种简单的方式           //浏览器关闭时并不意味着Session对象被删除
–设置会话超时。
–在Session对象上调用invalidate()方法。
–应用结束(崩溃或取消部署)
在web.xml文件中配置    //以分钟为单位

<session-config>

<session-timeout>15</session-timeout>

</session-config>

6:Session持久化管理

三:URL重写

Session对象的正常使用要依赖于Cookie
URL地址重写能够取得置于Cookie中的会话,并把会话ID附加到访问应用的各个URL最后

URL重写方法:

response.encodeURL()

response.encodeRedirectURL(“/lovobook/sucess.html” )

URL重写是容器自动完成的,但需要我们对URL进行编码才有效

总结:

1 HTTP协议使用的是无状态的连接,连接只针对一个请求/响应
2 状态管理方案:表单隐藏字段、Cookie、Session、URL重写
3 Cookie是Web服务器发送到客户端浏览器并保存的简短文本信息
4 Session对象就是服务器为客户端创建并维护的用于存放客户状态数据的对象
5 用户会禁用Cookie。这时我们可以使用URL地址重写来解决
6 通过HttpServletResponse的addCookie方法将该Cookie信息添加到响应信息中
7 Session对象是某个Servlet调用HttpServletRequest.getSession()这样的语句时才被创建
8 Session对象是保存在服务器端,浏览器关闭时并不意味着Session对象被删除
9 Session只认SessionID不认人
10 应当尽量使用维护时间短的域对象
11 在向客户返回第一个响应时,会同时尝试设置Cookie和URL重写两种做法 
 
 

第五章 Web应用程序状态管理的更多相关文章

  1. 《图解HTTP》阅读笔记-第五章-web服务器

      第五章.与HTTP协助的web服务器单台虚拟主机实现多个域名可以用单台物理主机运行多台虚拟主机,这些虚拟主机的IP相同,而虚拟主机有可以寄存多个不同主机名和域名的web网站,所以要保证发送HTTP ...

  2. JavaWeb chapeter 5 Web应用程序状态管理

    1.  HTTP协议使用的是无状态连接,对容器而言,每一个请求都来自于一个新的客户. 2. html表单隐藏字段:对用户在网站上的访问进行会话跟踪.为服务器端程序提供预定义的输入.存储动态产生的页面上 ...

  3. 第五章Web应用与应用层协议

    Web应用与应用层协议 本篇博文中的主要参考文献是<计算机网络高级教程>,分别是吴功宜老先生和吴英教授合著.这部教程是我研究生老师所推荐的网络必读科目,由于该教程讲解的基础知识详细,但内容 ...

  4. PMP备考_第五章_项目范围管理_实践思考

    项目范围管理 前言 今天学习项目范围管理的内容,深切的感受到了原单位在项目管理方面存在的问题,今天在这里做一个总结,既相当于对项目范围的一个学习整理,也相当于自己对项目实践过程中存在问题的一个思考. ...

  5. Web应用程序状态管理(上)

    一:概述Http协议使用的是无状态连接:客户浏览器与服务器建立连接-发出请求-得到 响应-关闭连接.话句话说,连接只针对一个请求/响应.由于连接不会持久保留 所以容器认不出做第二个请求的客户与做前一个 ...

  6. 第十五章-Web开发

    随着web的发展, 最开始使用的CS架构已经不适合web了, 现在web使用的架构是BS架构 如今大部分重量级的软件都以web形式提供了 web开发的四个阶段 1) 静态web页面 2) CGI: 静 ...

  7. 操作系统——第五章 输入输出(I/O)管理

    这就是SDT表和DCT表

  8. Linux学习《第五章用户文件权限管理》之补充学习

  9. Linux系统管理第五六七章 权限及归属管理 磁盘管理 文件系统与lvm

    第五六七章   alias 查看系统别名   67 chmod 设置文件或目录的权限 -R表示以递归的方式设置目录及目录下的所有子目录及文件的权限 u:属主 g:属组 o:其他人 a:所有人 +:添加 ...

随机推荐

  1. android textview支持多种格式跳转

    http://www.linuxidc.com/Linux/2011-08/40530p2.htm 1.android:autoLink属性,使TextView中链接手机号码/网页/邮件/地图 and ...

  2. DCDC与LDO

    DCDC DC/DC:直流电压转直流电压.严格来讲,LDO也是DC/DC的一种,但目前DC/DC多指开关电源. 具有很多种拓朴结构,如升压型DC/DC转换器.降压型DC/DC转换器以及升降压型DC/D ...

  3. I - Dividing Stones

    Description There are N stones, which can be divided into some piles arbitrarily. Let the value of e ...

  4. 64位进程调用32位dll的解决方法

    64位进程调用32位dll的解决方法   最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/ ...

  5. BAE上部署Ghost 0.5.1注意事项

    BAE上部署Ghost可参考基本安装上述安装使用的是ghost0.4.7版本 在ghost 0.5 中为了解决测试时事件侦听器过多引发的警告,在注册single事件时,将代码由原先的 process. ...

  6. 【C#】简单的发送socket字符串

    1 打开VS,新建一个C#窗口程序 2 添加按钮 3 写按钮的事件代码 双击这个按钮 进入代码界面 输入如下内容,注意IP和端口 private void button1_Click(object s ...

  7. AJPFX:外汇的杠杆保证金是什么

    外汇杠杆和保证金两者有着密切的关系.杠杆越大,交易时所用的保证金就越少. 杠杆即为保证金可以缩小的倍数.例如在没有杠杆的情况下,做一手即10万的欧元兑美元货币对合约(现在价格是1.05821),您所需 ...

  8. 522. Longest Uncommon Subsequence II

    Given a list of strings, you need to find the longest uncommon subsequence among them. The longest u ...

  9. 学习人工智还死拽着Python不放?大牛都在用Anaconda5.2.0

    前言 最近有很多的小白想学习人工智能,可是呢?依旧用Python在学习.我说大哥们,现在都什么年代了,还在把那个当宝一样拽着死死不放吗?懂的人都在用Anaconda5.2.0,里面的功能可强大多了,里 ...

  10. 试着用java实现DNS(一)——DatagramSocket, DatagramPacket, Message

    一般来说,自己编写DNS是没有必要的,目前开源的dns服务软件很多,功能也很强大.但是,有时候又是很有必要的,有着诸多好处.比如说,用于企业内网,简化DNS配置,可以根据企业需求添加新的功能,非常灵活 ...