会话
什么是会话:连接建立后,多次的交互
Cookie
什么是Cookie
- Cookie是在浏览器与服务器端交互时,由服务器在响应头中,存储的一小段数据,响应给客户端
- 浏览器在接收到响应头时,有Cookie,就保存在客户端
- 而后续每次对该服务器的访问,都会携带Cookie过去
如何创建Cookie并响应给客户端
1.创建Cookie对象
Cookie cookie = new Cookie("username","azhen");
2.将Cookie对象放在response里。
response.addCookie(cookie);
- 创建的Cookie必须在创建的同时指定存储的name和value。
- cookie的数据只能是String类型。简单数据
- 服务器端借助响应头Set-cookie告知浏览器cookie的保存
- 浏览器存储后,访问同一个项目,会携带该Cookie在请求头中,发送给服务器
- Cookie的默认生命周期是:浏览器会话关闭销毁(内存存储)
获取请求的cookie: getCookie()
因为客户端可以保存多个Cookie,在请求时,会携带所有当前项目的cookie
服务器是通过request请求对象获取所有的Cookie
Cookie的小问题:数据格式单一,只能存字符串。数据大小有限制:8k。保存在客户端,早期容易被修改
Session
什么是Session
- 客户端与服务端交互时,会在当前连接建立一个Session对象(会话),同一个session范围内的多次请求域响应视为相同会话。
- 在同一个Session中,客户端可以访问不同的资源,而共享同一个Session里的数据。
- Session是保存在服务器端的技术。是根据请求来进行创建的。是服务器拆改年间的,借助Cookie存储在客户端一份,服务端保存一份。
创建Session
1.获取session
HttpSession session = request.getSession();
2.输出session的id
session.getId()
共享数据(作用域对象)
同一次会话,会有多次不同的请求和不同的资源,session可以存,取,删除数据。
session.setAttribute(" "," ");
getAttribute(" ");
session的时效性
- 默认时效性:浏览器关闭即销毁
- 设置有效时间
- 强制立即时效
Session的存储机制
- Session的存储要借助Cookie
- 第一次访问,服务器会根据请求报文,为其创建session对象。后续访问,直接获取即可。前程操作的是Cookie。
- session立即时效了:服务器先销毁session,客户端再次访问时,会携带旧的cookie里的session到服务器,服务器判断当前请求的新session和cookie里的session不一致,则会将新session放到cookie里响应给客户端存储新的。
三大域对象
- 请求域对象:request
- 会话域对象:session
- 应用域对象:application(ServletContext)
- 区别:都可以共享数据,共享数据的范围有区别:请求域对象,是一个request对象有效。转发有效,重定向无效。 会话域对象,是一个session对象有效。转发有效,重定向有效。 应用域对象,是一个Servletcontext对象有效。服务器重启,重新部署,关闭失效。
过滤器
- 过滤器技术属于Servlet范畴,专注于Servlet的请求和响应
- 过滤器要优于要过滤的Servlet执行
- 执行节点: 请求时执行一次,响应式执行一次
- 解决问题:多个Servlet的共性重复代码,前置性的对请求做一些操作,后置性的对响应做一些操作
过滤器的实现
创建一个目标Servlet
创建一个类,实现filter接口,重写dofilter方法
配置web.xml
Filter的生命周期
servlet的声明周期:第一次接收请求时,Servlet创建对象,执行init方法,执行service方法,最后服务器停止执行destory
过滤器链
多少个过滤器都要记住一个原则:已经执行的过滤器,一定会执行响应的过滤
根据业务的需要,选择放行不放行
执行顺序及注解实现: 默认顺序由web.xml中的filter-mapping标签的先后顺序决定
监听器
监听某个对象或某个对象的行为触发了,就会触发一些额外操作。
session对象钝化和活化
钝化:将session对象序列化存储在本地磁盘中。
活化:将本地磁盘的session对象序列化回内存中。