• 第五章 Web应用程序状态管理


     
    状态管理概述
    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重写两种做法 
     
     
  • 相关阅读:
    mapcontrol的鼠标样式
    SQL SERVER数据类型与C#数据类型对照表
    正则表达式基元
    WPF中UserControl和DataTemplate
    [转]SQL三种获取自增长的ID方法
    [转]SQL Server 存储过程 一些常用用法(事物、异常捕捉、循环)
    Learn JavaScript(面向对象的程序设计01)
    CLR:基元类型、引用类型和值类型
    grid layout 相关代码
    css关于position的几个值
  • 原文地址:https://www.cnblogs.com/hellokitty1/p/4922652.html
Copyright © 2020-2023  润新知