概述
Cookie是什么?
Cookie可以保存信息(保存在浏览器端上),其中保存了String类型的name-value(键值对)
Cookie可以保存会话状态,这个会话状态是保留在客户端(浏览器端)上的; 只要Cookie清除,或者Cookie失效,这个会话状态就没有了【应用在Session中,请看下一章节】
Cookie是保存在浏览器客户端上的
Cookie默认保存在浏览器的缓存中,浏览器关闭Cookie消失
Cookie可以保存在客户端硬盘文件中,浏览器关闭Cookie还在,除非Cookie消失(有效时长完结)
创建Cookie
服务器创建Cookie并发送给浏览器
Cookie绑定路径
Cookie未绑定路径时默认绑定的路径:
在默认情况下,未设置Cookie绑定路径的Cookie,会绑定当前访问路径的上一层路径(带"/"),如:
访问/webapp/test/a路径时,服务器发送的Cookie(此Cookie未人为设置绑定路径),那么此Cookie默认绑定的路径未/webapp/test/,所以访问/webapp/test/、/webapp/test/···时都会将此Cookie发送给服务器
Cookie绑定路径:
cookie.setPath();来设置此Cookie绑定的访问路径;当设置此Cookie绑定的路径时,浏览器只有访问此路径,以及此路径下的其他资源时,浏览器才会将此Cookie发送到服务器
如下:
那么此Cookie只有浏览器访问/webapp19/user路径,以及/webapp/user/···等等其他此路径下的其他资源时,浏览器才会将此Cookie发送到服务器
浏览器何时发送Cookie
只有当浏览器访问Cookie绑定的路径以及此路径下的其他资源时,浏览器才会将Cookie发送给服务器
Cookie有效时长
通过方法cookie.setMaxAge(int expiry)
- 值为正数,以秒为单位指定Cookie的最长期限,Cookie存储在硬盘文件当中;
- 值为负数,则此Cookie在关闭此窗口页面后即失效;
- 如果为零,则删除此Cookie;
HttpSession
Session概述
1.Cookie可以将会话状态保存在客户端,而HttpSession可以将会话状态保存在服务器端
2.HttpSession对象是一个会话级别的对象,一次会话对应一个HttpSession对象
3.在会话进程中,web服务器一直为当前这个用户维护着一个会话对象HttpSession
4.在web容器中,维护了大量的HttpSession对象,这些对象放在一个Map集合中
获取Session对象
Session实现原理
1,浏览器发送请求,服务器对应的Servlet首次调用request.getSession(true);方法时获取Session对象:
1.服务器会创建一个Session对象,同时创建一个对应的Cookie对象,并且Cookie对象的name是2.JSESSIONID,Cookie的value是32位长度的字符串
3.服务器将Cookie的value和HttpSession对象绑定到session列表中(Map集合)
4.服务器将Cookie发送到客户端浏览器,浏览器将Cookie保存到缓存中
2, 浏览器再次发送请求,会自动提交Cookie(前提是同一个绑定路径下)
1. 当服务器Servlet再次调用request.getSession();方法时获取Session对象
2.服务器接收到Cookie,验证Cookie的name为JSESSIONID,然后获取Cookie的value
3.通过Cookie的value去session列表(Map集合)中检索对应的HttpSession对象
Session对象生命周期
web系统中引入了session超时的概念,当很长一段时间(这个时间可以配置)没有用户再访问session对象,此时session对象超时,web服务器自动回收session对象
设置Session对象失效时间(两次请求之间的最大时间间隔),优先级 1 > 2 > 3
1.通过Java代码实现,单位秒
2.修改项目的web.xml文件,单位分钟
3.修改Tomcat默认配置,单位分钟,默认30分钟
HttpSession中的常用方法
什么是一次会话?
- 一般可以这样理解:用户打开浏览器,在浏览器上发送多次请求,直到最终浏览器关闭,表示一次完整的回话。
- 本质上理解:Session对象创建到最终超时销毁,才是真正意义的一次会话;因为即使浏览器关闭,可以通过重写URL的方式从其他电脑其他浏览器同样使用这个Session对象。
HttpSession的应用
例如:报存用户登录状态,验证用户是否已登录
ServletContext、HttpServletRequest、HttpSession三者共享数据的区别
1.ServletContext、HttpSession、HttpServletRequest对象都是范围对象。
2.ServletContext是应用范围,整个项目、所有的Sevlet、所有的用户共享
3.HttpSession是会话范围,同一个用户、同一个会话中多次请求共享
4.HttpServletRequest是请求范围,单次请求共享(请求转发)
5.三者都可以通过void setAttribute(String name, Object value) 和 Object getAttribute(String name)方法共享数据
6.application完成跨用户共享数据;
7.session完成跨请求共享数据,但是这些请求必须在同一个会话当中;
8.request完成跨Servlet共享数据,但是这些servlet必须在同一个请求当中(请求转发)
!!!!!使用原则:由小到大尝试,优先使用小范围
乱码问题
为什么出现请求乱码?
浏览器对请求数据的编码方式和服务器对请求数据的解码方式不同。Get请求的数据在URL中,属于URL编码;Post请求数据的编码方法即页面的编码方式
- 以Tomcat7.0为例,Tomcat会使用默认的ISO-8859-1进行解码,此时字符集可能与浏览器端编码的字符集不同而出现乱码
解决请求乱码的方法
(1)适用于Post请求和Get请求
(2)仅支持Post请求
(3)仅支持Get请求
修改Tomacat默认的编码字符集
处理响应乱码
最后
以上就是高高铃铛为你收集整理的JavaWeb 03 Cookie与SessionHttpSession ServletContext、HttpServletRequest、HttpSession三者共享数据的区别的全部内容,希望文章能够帮你解决JavaWeb 03 Cookie与SessionHttpSession ServletContext、HttpServletRequest、HttpSession三者共享数据的区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复