Web 应用程序状态管理

  通过隐藏表单域 hidden,cookie,session,重写URL来实现;

  cookie存在于客户端,浏览器关闭时失效

  cookie原理:服务器在响应请求时将一些数据以“键-值”对的形式通过响应信息保存在客户端

  Servlet中提供了如下一系列操作Cookie的API
  Cookie(name, value):构造方法用于创建一个或多个Cookie
  setMaxAge(int lifetime):设置Cookie的过期时间(以秒为单位)。默认值为负值(Cookie将在浏览器关闭时过期)
  getMaxAge():获取Cookie的过期时间。
  getName():获取Cookie的名字
  setValue(String value):指定Cookie的值。
  getValue():获取Cookie的值

  要将Cookie发送到客户端,Servlet应该按照下列的操作步骤执行:
  创建一个或多个Cookie,使用构造方法指定Cookie的名字和值
  使用setValue方法为Cookie设置属性值
  使用HttpServletResponse对象的addCookie()方法将Cookie插入到响应头中
  要读取客户端传入的Cookie,Servlet执行下列操作步骤:
  使用HttpServletRequest对象的getCookies方法返回一个Cookie对象数组
  Servlet遍历该数组(调用getName()方法),直到找到与名称相匹配的Cookie值

  

  Session存在于服务器

  Session原理 

  服务器可以为客户端创建并维护一个Session对象,用于存放数据。
  在创建Session对象的同时,服务器将会为该 Session对象产生一个唯一编号,这个编号称之为SessionID
  服务器以Cookie的方式将SessionID存放在客户端。
  当浏览器再次访问该服务器时,会将SessionID作为Cookie信息带到服务器,服务器可以通过该SessionID检索到以前的Session对象,并对其进行访问

  创建Session

  HttpSession session = request.getSession();

  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唯一的标识

  

  Session的存在依赖于cookie

  当cookie被禁用时,采用URL重写,及在地址后面添加SessionId;

  URL重写

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

  总结:  

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

  

java Web(4)的更多相关文章

  1. 高效 Java Web 开发框架 JessMA v3.5.1

    JessMA 是功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 DAO 数据库访问组件(内部已提供了 Hibernate.MyBatis 与 J ...

  2. 高效 Java Web 开发框架 JessMA v3.4.1

    JessMA 是功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 DAO 数据库访问组件(内部已提供了 Hibernate.MyBatis 与 J ...

  3. java web 之客户关系管理系统

    这个周末真的是觉得自己学会了一个比较高大上的本领,为什么这么觉得呢?那是因为星期六的时候觉得自己可以看看源码能做出来,可是让我头疼的是花费了一上午的时间还是没有弄出来,还好上天给了我机会,要是没有老师 ...

  4. Java Web中的中文编码

    Java Web开发中经常会遇到中文编码问题,那么为什么需要编码呢?因为人类需要表示的符号太多,无法用1个字节来表示,而计算机中存储信息最小单元为1个字节.所以必须指定char与byte之间的编码规则 ...

  5. java web后台开发SSM框架(Spring+SpringMVC+MyBaitis)搭建与优化

    一.ssm框架搭建 1.1创建项目 新建项目后规划好各层的包. 1.2导入包 搭建SSM框架所需包百度云链接:http://pan.baidu.com/s/1cvKjL0 1.3整合spring与my ...

  6. JAVA WEB项目中各种路径的获取

    JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在s ...

  7. JAVA WEB WITH IDEA

    本文主要介绍使用IDEA开发环境,创建JAVA WEB 工程,并介绍war包的制作过程. 1 创建MAVEN工程

  8. java WEB开发入门

    WEB开发入门 1 进入web JAVASE:标准- standard   JAVA桌面程序 GUI    SOCKET JAVAEE:企业-浏览器控制  web 2 软件结构 C/S :client ...

  9. Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用

    问题:Jenkins 2.16.3默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的. 如何设置才能让出来呢? 打开&quo ...

  10. 5款强大的Java Web开发工具

    1.WebBuilder这是一款开源的可视化Web应用开发和运行平台.基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发:高效.稳定和可扩展的特点,适合复杂企 ...

随机推荐

  1. hdu 5170 精度控制

    众所周知,GTY是一位神犇,为了更好的虐场,他从来不写数学作业而是去屠题,他的数学老师非常不爽,但由于GTY每次考试都AK,她也不能说什么,有一天老师在黑板上写了四个数——a,b,c,da,b,c,d ...

  2. 7 numpy 傅里叶,提取图片轮廓

    任务:提取照片中轮廓   本次处理图片:我的女神之一  江一燕   导入模块: #jyy.show()   会打开本地图片浏览器       使用傅里叶反转 获取实部,舍弃虚部 去除小数部分 将一维数 ...

  3. 用Twebbrowser做可控编辑器与MSHTML(调用js)

    记得intraweb的网页设计也程序开发分开中,是怎么定义的变量的.就是在网页中插入占位符.我们规定占位符是{%Name%} {%Birthday%}单页面装载之前or之后,我们用自己的js查找占位符 ...

  4. HTML的基本操作学习----常用标签,特殊符号,列表,表格,表单

    什么是HTML 常用标签 标题标签 段落标签 粗体标签+斜体 超链接标签 图片标签 列表标签 无序标签 有序标签 自定义列表 div标签 特殊符号 表格 表单 HTML 什么是 HTML?   HTM ...

  5. Java基础学习总结(71)——深入理解Java虚拟机内存

    Java虚拟机中的内存分配图 : 各个区域的特性总结如下表: 补充说明: 当多线程情形下,可能多个线程要在堆上分配内存,那么可能出现内存分配的同步问题,解决方案有两个,一个就是同步内存分配动作:另一个 ...

  6. Vladik and Entertaining Flags

    Vladik and Entertaining Flags time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  7. 在全局对象(不是指针)的构造函数里不要对std集合做太多操作

    写MaxvisionOnvif的时候,我用个宏把每个Command类注册到了CommandBuilder里面,通过全局对象初始化实现的,如下: void CommandBuilder::Registe ...

  8. 【ACM】NYOJ_288_Time_20130725

    Time时间限制:1000 ms  |  内存限制:65535 KB 难度:2描述 Digital clock use 4 digits to express time, each digit is ...

  9. Android:让Link始终保持在程序的WebView中跳转

    在Android的WebView中,当点击调用网页的链接时,默认的动作是跳转到系统设定的默认浏览器中.如果想让链接始终在当前WebView中跳转的话,就需要添加以下代码: WebView webVie ...

  10. Intellij Idea:创建带签名的APK

    步骤如下: 1. 选择菜单Build -> Generate Signed APK… 2. 创建或选择已存在的Key Store(选择已存在的Key Store的话直接跳到第5步) 3. 输入K ...