Web状态管理

  - HTTP协议使用的是无状态的连接

  - 对容器而言,每一个请求都来自于一个新的客户

解决方案-表单隐藏字段

<input type=”hidden” name=”session” value=”...”>

 该项表单内容在提交表单时,指定的名称和值将包含在Get和Post数据中。隐藏字段不会呈现给用户的页面外观,相反,它们可以存储固定发送给服务器的固定名称和值,而不管用户输入如何。有如下用途:

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

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

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

  缺点:只有当每个页面都是动态生成的时候才会有效

使用隐藏字段进行会话跟踪

解决方案-Cookie

  Cooike是Web服务器发送到客户端浏览器的简讯文本信息,在第一次访问服务器后就由服务器向客户端浏览器发送,以后在访问同一个Web站点或域时,浏览器就会毫无更改地返回该文本信息。通过让服务器来读取以前发送到客户端的信息,Web应用程序就能够为访问者提供许多方便。

HTTP Cookie的解决方案

- 用Cookie保存值

//实例化一个Cookie,以键值对的形式存放
Cookie cookie = new Cookie(key,value);
//重新设置Cookie的值
cookie.setValue(newValue);
//设置Cookie的生命周期
//值为正数表示为多少秒后清除cookie,0表示立即清楚cookie
//若为负值表示关闭浏览器后清除cookie
cookie.setMaxAge(second);
//把Cookie返回给响应
response.addCookie(cookie);

- 获取Cookie中的值

//获取请求中的Cookie
Cookie[] cookies = request.getCookie();
//遍历取出Cookie中的键值对
For(Cookie cookie:cookies){
String key = cookie.getName();
String value = cookie.getValue();
//获取之后对值进行操作的代码
}

解决方案-URL重写

  当浏览器不支持Cookie或者禁用Cookie时,就可以使用URL地址重写。但是服务器端程序需要为此完成很多简单却又繁琐的处理过程,因为引用站点并返回给用户的每个URL,甚至通过服务器重定向的方式,都追加了额外的信息。

URL重写解决方案

Session原理

  - 服务器可以为客户端创建并维护一个Session对象,用于存放数据。

  - 在创建Session对象的同时,服务器将会为该 Session对象产生一个唯一编号,这个编号称之为SessionID

  - 服务器以Cookie的方式将SessionID存放在客户端。

  - 当浏览器再次访问该服务器时,会将SessionID作为Cookie信息带到服务器,服务器可以通过该SessionID检索到以前的Session对象,并对其进行访问

Session的工作流程

Session会话跟踪机制

  - 用户发送请求

//从请求中获取session对象
HttpSession session = request.getSession();

  - 服务器的响应如下

  //HTTP的响应信息

  - 再次发送请求

HttpSessoin接口

  HttpSession是Java平台对Session机制的实现规范,因为它仅仅是个接口,具体由每个web应用服务器的提供商实现。一般情况下Session都是存储在内存里,当服务器进程被停止或重启的时候,内存里的Session也会被清空(Session对象占用着系统资源)。

  - 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可以采用的简单方式

- 设置会话超时。

- 在Session对象上调用invalidate()方法。

- 应用结束(崩溃或取消部署)

在web.xml文件中配置

<session-config>

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

</session-config> 

提示:在web.xml文件中指定会话超时时间,是以分钟为单位。在程序中设置时间是以秒为单位。

Application与Session域范围的属性比较

- 在web应用上下文域范围和Session域范围中,都可以用一个名字来绑定一个对象,从而在域范围内进行访问

- 绑定在Session范围内的对象仅仅在一个持续的会话期间被维护

- 绑定在Application(应用上下文)中的对象,在整个Web应用程序运行过程中都被维护

-都使用相同的方法:setAttribute()和getAttribute()

提示:在Application应用范围内保存的对象,维护时间要比在Session域范围内保存的对象长,但是都要占用服务器系统资源,应当尽量使用维护时间短的域对象,或者在不使用后利用removeAttribute()方法销毁绑定对象。

Session持久化管理

  Session对象的信息一般情况下置于服务器的内存中,当服务器由于故障重启,或者Web应用重新加载的时候,此时的Session信息将会全部丢失。为了避免这样的情况,在某些场合可以将服务器的Session数据存放在文件系统或数据库中,这样的操作称为Session对象的持久化。Session对象在持久化时,存放在其中的对象以序列化的形式存放,这就是为什么一般存放在Session中的数据需要实现可序列化接口(java.io.Serializable)的原因;

  通过Context元素的子元素Manager配置Session管理对象:

- ClassName属性用于指定管理Session的类可以是StandarManager或PersitentManager。

- maxActiveSession表示允许存在最多活动Session对象的数目,-1表示不限制。

- maxInactiveInterval表示Session的默认的最长不活动间隔,单位为秒。

- pathname表示StandarManager在服务器重启或应用重新加载时持久化Session对象的文件名,如果设置为"",相当于关掉了Session的持久化机制。

URL重写

- Session对象的正常使用要依赖于Cookie

  - URL地址重写能够取得置于Cookie中的会话,并把会话ID附加到访问应用的各个URL最后

  URL重写的方法(把SessionID附加到URL地址后面)

- response.encodeURL();

- response.encodeRedirectURL("/lovobook/otherServlet");

提示:静态HTML页面不能实现URL重写,因为URL附加内容必须动态生成。

并且使用URL编码后,容器会首先尝试使用Cookie完成会话管理,只有当Cooike方法失败时才会使用URL重写。

JavaWeb总结(七)的更多相关文章

  1. JavaWeb结合七牛云存储搭建个人相册服务

    JavaWeb结合七牛云存储搭建个人相册服务 一.引言1. 课程概述 相信很多人都知道网站一般会有很多图片,对于小型网站来说,图片放在网站服务器上不算什么,但当图片数量很大时,会造成服务器很臃肿,相应 ...

  2. javaweb笔记七

    过滤器:是一个web中间组件,用于拦截从客户端发送给服务器的请求和响应.当客户端向服务器发出请求时,服务器会查看是否有过滤器和该请求匹配,如果有,则交给过滤器执行,业务操作后,可以将请求继续向目标资源 ...

  3. JavaWeb(七)之详解JavaWeb路径

    前言 在我们的实际开发中,经常要写路径,不管是链接,重定向还是转发,这都是需要路径的.那这一篇我给大家详细的分享一下Web中的各种路径问题. 世界上一切东西都是相对的,对于这点而言,相信大家并不陌生, ...

  4. JavaWeb总结(七)—JSTL标签库

    一.JSTL标签库介绍 JSTL标签库的使用时为了弥补HTML标签的不足,规范自定义标签的使用而诞生的.使用JSTL标签的目的是不希望在JSP中出现Java逻辑代码. 二.JSTL标签库的分类 1.核 ...

  5. JavaWeb 后端 <七> 之 mvc3层架构

  6. JavaWeb(七)Cookie,EL表达式,标准标签库

    Cookie Cookie概述 Cookie译为小型文本文件或小甜饼,Web应用程序利用Cookie在客户端缓存服务器端文件.Cookie是以键值对形式存储在客户端主机硬盘中,由服务器端发送给客户端, ...

  7. JavaWeb学习 (七)————HttpServletResponse对象(一)

    一.HttpServletResponse对象介绍

  8. JavaWeb【七、JSP状态管理】

    http协议无状态性 当提交请求,服务器返回响应.但当同一用户同一浏览器再次提交请求,服务器并不知道与刚才的请求是同一用户浏览器发起. 保存用户状态的两大机制 Session-保存在服务器端 Cook ...

  9. 学习JAVAWEB第七天

    ## Bootstrap: 1. 概念: 一个前端开发的框架,Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JavaScript 的 ...

  10. JavaWeb【一、简介】

    原计划上周完成的内容,硬是过了一个清明拖到了这周,工作上还有很多东西没做...明天抓紧看把,争取这周末搞定 内容简介:(学习完后会重新梳理调整) 1.JavaWeb[一.简介] 2.JavaWeb[二 ...

随机推荐

  1. 网站源IP暴露使用高防之后还行不行如何解决?

    如题:使用高防后源站IP暴露的解决办法 在购买高防IP后,如果还存在攻击绕过高防直接打到源站IP的情况,就需要更换下源站IP了.但在这之前,请务必排查确认没有其他可能暴露源站IP的因素后,再去更换源站 ...

  2. 【Kettle】2、文件夹与界面介绍

    1.文件夹介绍 下载Kettle6.1解压后出现下图相关文件夹以及文件夹介绍说明: Lib:存放Kettle的核心(core)jar包.工作引擎(engine)jar包.数据库(DB) jar包.图形 ...

  3. MyEclipse 智能提示设置

    在实际的开发当中,编译器没有智能提示,确实是效率很低,下面我就给大家讲一下在MyEclipse中设置智能提示,方便大家的开发,希望能帮到大家. 方法一:首先,在MyEclipse的菜单栏中找到wind ...

  4. JAVA入门之程序设计环境搭建

    这篇文章写给刚接触或者想学JAVA的新朋友.学习JAVA,需要找一本好的入门书籍,推荐<Java从入门到精通>,然后就是JAVA程序设计开发环境的搭建. 首先,我们需要安装JAVA开发工具 ...

  5. .net mvc Html.DropDownListFor 设置默认值无效

    错误描述: 控制器部分: //从数据字典中加载下拉框 (使用DropDownListFor,SelectList 中不需要设置选中值,即便设置了选中值,也会优先读取Model中对应的值) ViewBa ...

  6. November 21st 2016 Week 48th Monday

    A bird is known by its note, and a man by his talk. 闻其声而知鸟,听其言而知人. Listen to what a man talks, watch ...

  7. 18年11月5日 NOIP模拟赛

    T1 题解 对于k=100的情况,贪心 对于100%的数据 可以发现,当前的决策只对后面的开采有影响,且剩余耐久度与之后的开采收益成正比,如果倒着考虑这个问题,得出i-n的星球1点耐久度所能获得的最大 ...

  8. 简单的dp加贪心

    题目链接:传送门 这个题目让我纠结了好久,之后恍然大悟是求最长的递减序列,并加上贪心的算法,如果有大于两个的发射系统,应该判断使导弹的高度与此时个个发射系统的高度比较,选取高度差最小的去执行这次的拦截 ...

  9. python3 80行代码实现贪吃蛇

    上面是实现的截图,废话不说,直接开始说一下代码 pos = { 'UP': (-1,0), 'DOWN':(+1,0), 'LEFT':(0,-1), 'RIGHT':(0,+1), } curren ...

  10. C# 页面调用控制台应用程序

    var rootPath = System.Configuration.ConfigurationManager.AppSettings["rootPath"]; Process. ...