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. maven是干什么的?

    最近在研究后台相关的东西,虽然前端还不是很了解吧~但是计算机一年没写后台代码,我快废掉了呀~emmmmm....他们老是和我说maven,恩恩,那就看看到底是啥?从大神聚集的知乎上拉了一篇过来~存档: ...

  2. hdu2002 计算球体积【C++】

    计算球体积 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  3. Navicat premium连接Oracle报ORA-28547错误

    1:ORA-28547 原因:navicate Primium版本的OCi和本地数据库的OCI版本不一致. 解决方法: 1:把navicate Primium版本自带oci.dll替换本地Oracle ...

  4. (39.4) Spring Boot Shiro权限管理【从零开始学Spring Boot】

    在读此文章之前您还可能需要先了解: (39.1) Spring Boot Shiro权限管理[从零开始学Spring Boot] http://412887952-qq-com.iteye.com/b ...

  5. noip模拟赛 Massacre at Béziers

    题目背景 下发压缩包链接: https://pan.baidu.com/s/1geC4ooz 密码: 3vpt 所有的一切———所有的一切都被染成了红与黑. 翻卷的红莲烈焰舔舐着大地,释放出异抽的黑烟 ...

  6. 洛谷——P2347 砝码称重

    https://www.luogu.org/problem/show?pid=2347#sub 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输 ...

  7. 配置Chrome的代理服务器

    用命令行启动Chrome,带以下参数: --proxy-server="socks5://myproxy:8080"   下列参数可选 --host-resolver-rules= ...

  8. 【Todo】Java TreeSet学习 & ceiling,floor

    参考 http://www.yiibai.com/java/util/java_util_treeset.html 另,用Java的TreeSet的ceiling可以模拟upper_bound(获得更 ...

  9. MySql免安装版l配置方法

    初次接触mysql,折腾了一天,总是安装不成功,服务启动不了.后来从官网下载了ZIP Archive版,不用安装,直接把它解压到磁盘,做一些简单的配置就可以. 软件下载地址:http://dev.my ...

  10. [LeetCode][Java] Minimum Depth of Binary Tree

    题目: Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the ...