Java——状态管理

一、什么是状态管理

因为web应用程序是基于Http请求的,而Http协议是

一个短连接的协议,一次请求一次响应之后,浏览器

和服务器之间就断开了连接,同一个用户下一次请求需要

重新建立连接,无法跟踪用户的状态信息,我们需要

跟踪同一个用户的多次请求,就对这些请求进行状态管理,

将他们当做是一个整体来看待

状态:多次交互过程中产生的数据

管理:对数据进行管理

状态管理方式:

cookie:浏览器客户端状态管理,将状态数据保存在浏览器上

session:服务器端状态管理,将状态数据保存在服务器内存中

二、Cookie状态管理

1、Cookie的执行原理

1>浏览器在第一次向服务器发送请求之后,

服务器可以创建一个cookie对象,然后通过

响应数据包的响应消息头带回给浏览器

Set-Cookie:name=lisi

2>浏览器接收并解析响应数据包,取出响应消息头

中的cookie信息,存储在浏览器端

3>在后续浏览器每次向服务器发送请求时,

会在请求数据包中以请求消息头方式将

cookie信息带给服务器

Cookie:name=lisi

4>服务器在接收到cookie之后,取出存储在

cookie中数据进行继续处理,从而完成

状态管理

2、cookie的相关API方法

1>创建cookie对象

Cookie c = new Cookie("name","value");

2>添加cookie到响应数据包中

response.addCookie(c);

3>获取浏览器传过来的所有cookie

Cookie[] cookies = request.getCookies();

4>获取cookie的name和value

String name = cookie.getName();

String value = cookie.getValue();

5>修改cookie的value值

cookie.setValue("value");

3、cookie的中文处理

cookie的name和value不能直接存储中文,

需要对中文进行编码

编码:URLEncoder.encode(中文内容,编码方式)

解码:URLDecoder.decode(获取内容,编码方式)

4、cookie的过期时间

默认情况下,cookie是存储浏览器内存中的,

只要浏览器不关闭,cookie就一直存在,

浏览器关闭之后,cookie就被删除了,

服务器可以通过setMaxAge()方法来修改

cookie默认的过期时间,单位是秒

取值:

>0:将cookie保存在浏览器的磁盘文件中,跟浏览器是否关闭无关,只有超过时间才会删除,

cookie就会一直存在,浏览器关闭,cookie被删除(默认值)

=0:立即删除浏览器上的cookie不存储,无论浏览器是否关闭

5、cookie的优缺点

1>cookie是将信息保留在浏览端,

可以被用户修改和删除导致不安全,

也可以被用户禁止

2>浏览器端保存的cookie数量是有限制(4k)

3>cookie的值只能ASCII字符串

三、Session状态管理

1、Session的执行原理

1>前端浏览器在第一次向服务器发送请求后,

服务器可以创建一个session对象,并给这个

session对象分配一个32位的唯一id,也就是

JSESSIONID,并将相关信息存入到session对象中

2>在服务器第一次给前端浏览器返回响应时,

会在响应数据包中以Set-Cookie的响应头

将JSESSIONID带回给浏览器

3>浏览器接收并解析响应数据包,取出响应消息头

中的JSESSIONID,以cookie的方式存储在浏览器端

4>在后续浏览器每次向服务器发送请求时,

都会在请求数据包中以Cookie请求消息头的方式

将JSESSIONID带回服务器

5>服务器接收并解析请求数据包,取出请求消息头中

的JSESSIONID,并根据JSESSIONID找到之前创建的

session对象,取出相关信息,从而完成状态管理

2、session相关的API

1>创建或查找session

HttpSession session = request.getSession();

2>往sesion中存储数据

session.setAttribute(String name,Object value);

3>从session中根据key获取value

Object value = session.getAttribute(String name);

4>从session中根据key移除键值对

session.removeAttribute(String name);

域对象:

1>HttpServletRequest

只在一次请求间传递共享数据

2>HttpSession

同一个用户的多次请求间传递共享数据

3>ServletContext

同一个web应用程序下传递共享数据

存储数据建议:尽量往小的域空间中存储数据,避免数据覆盖

转发:通过request传递数据

重定向:通过session传递数据

3、session的超时时间

默认情况下,服务器端的session对象超时时间为30分钟

修改session默认的生成时间:

1>通过tomcat下web.xml配置文件来进行修改,

单位是分钟,修改为0或负数表示永远不失效,

一般不建议修改这里,他是针对容器中

所有应用程序的所有session来进行设置的

2>session.setMaxInactiveInterval(int seconds);

设置某个session的生存时间,单位为秒

如果设置0或负数,表示session永远不会失效

3>session.invalidate();

立即销毁session对象

4>Tomcat容器关闭或重启后,所有应用中的所有session对象

都会被销毁

4、session的优缺点

1>session是将数据保存在服务器端,更加安全

2>session可以保存的数据类型更多,数据量更大

3>创建的session过多,数据量过大,会增加服务器内存压力

5、session的使用场景

1>登录验证

2>权限验证

3>验证码

1)验证码作用

防止机器人恶意攻击破坏系统

2)验证码原理

服务器端生成一串数据,然后以人能够

识别,但是机器人不能识别的方式发给

用户,用户接收到验证码之后,再将验证码

发送给服务器,服务器接收用户发送的验证码

和之前生成的验证码作比对

3)常见验证码

图片,邮箱,短信,滑动块,点文字,语音...

1、完成登录验证, 用户未登录不能执行员工的增删查改功能

2、登录成功在在右上角和左下角显示登录用户名称

3、退出

4、注册验证

1>账号必须是2-6位英文

2>密码2-6位纯数字

3>重复密码验证

4>验证码

5>判断账号是否重复

5、在emp表中添加一列,表示他所关联的用户

不同用户登录后,查看到的不同员工信息

6、分页查询

页码 页容 param1 param2

1 3 0 3

2 3 3 3

3 3 6 3

select * from emp limit 0,3;

select * from emp limit 3,3;

select * from emp limit 6,3;

页码:page

页容:pageSize

param1:(page-1)*pageSize

param2:pageSize

分页公式:

当前页:select * from emp limit (page-1)*pageSize,pageSize;

总记录数:select count(*) from emp; total

总页数pageCount :total%pageSize==0?total/pageSize:total/pageSize+1

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

God Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值