标签:
一、cookie VS session
1)应用场景
cookie可以用于:
记录用户上次登录的时间
记住用户名和密码
session可以用于:
防止非法登录(即直接跳转到本来需登录验证方可登录的页面)
用户登录时输入的验证码是否正确
购物车功能,如果结合cookie,还能够实现,当浏览器关闭,下一次打开的时候,购物车中的物品依旧存在
2)存储位置
cookie由服务器端写入,存在于客户端的临时文件夹,可以被多个浏览器所共享。
session存在于服务器的内存中,因此不要向其中放太多东西,一个session对应于一个浏览器,因此,一个session域对象为一个用户浏览器服务
3)安全性
cookie是以明文方式保存在客户端,可以通过md5加密之后再存放
session存放在服务器的内存中,安全性相对较好
4)网络传输量
cookie会传递信息给服务器,session的属性不会给客户端,不存在网络传输问题
5)生命周期
cookie的生命周期是累计的,从创建时就开始计时,如果设定20分钟,那么20min后cookie就会失效。cookie的默认生命周期是会话周期,关闭浏览器之后,cookie销毁。如果setMaxAge(0),就是直接删除该cookie,如果setMaxAge(负数),则是浏览器关闭时候销毁(相当于默认a)
session的生命周期是间隔的(发呆),如果设定其生命周期为20min,那么只有20分钟内没有访问该session,才会失效
在以下情况下,session也会失效:
a.关闭服务器
b.web应用reload
c.时间到了
d.调用了session的invalide方法
注意:session创建通过request.getSession()《如果有就获得,如果没有就会创建》,保存一直在服务器端,因此其生命周期和客户端的操作无关,不管是否打开或者关闭浏览器,都不会对其生命周期带来任何影响;只能通过session.setInter...Time来指定
6)cookie和session之间的联系
a.cookie和session都是由服务器端创建,不同在于cookie通过response.addCookie()输出到客户端保存在约定的文件夹中,而session则一直存在于服务器端
b.session在创建的时候,服务器会同时创建一个cookie,保存对应的JSESSIONID;之后每一次关于session的操作,客户端浏览器都会向服务器发送该JSESSIONID,该cookie的生命周期为一个会话周期(即session在浏览器关闭的时候销毁)。这是session能够在http无状态的条件下,识别一系列请求属于一个会话的关键。因此,如果想要实现关闭浏览器,打开购物车,里面物品依旧存在的功能,对应方法就是,创建一个cookie,对应的key和value按照session的规矩定,并设定其生命周期。
Cookie cookie=new Cookie("JSESSIONID",session.getId()); cookie.setMaxAge(60*30); response.addCookie(cookie);
其他知识点补充:
1)cookie中保存中文乱码
解决方法:利用urlEncoding和urlDecoding对中文部分进行编码和解码
2)利用url重写来解决cookie禁用的情况下使用session的问题,此时JSESSIONID会通过queryString来传递
response.encodeURL("初始的url");
不过这之前需要调用一下session,很简单,一句话
request.getSession()
二、servletContext
1)应用场景
网站显示当前浏览者为第几位
网站显示有多少人在线(如果想要保证网站重启等情况下,数据不丢失,可以后台开启线程,没过一段时间,将对应数据写入文件系统中)
2)说明
servletContext是在服务器端
servletContext被所有的客户端所共享
生命周期:servletContext是当web应用启动的时候,自动创建,在web应用关闭的时候销毁
3)应用方法
1)获取web应用的参数,如数据库连接相关的常数,在web.xml中配置<context-param>参数
2)读取资源文件
a.读取文件
资源文件在webRoot目录下
this.getServletContext().getResourseAsStream()
b.获取文件路径
获取文件在本地资源系统的而绝对路径,如在webRoot目录下放置一个文件
this.getServletContext().getRealPath()
c,如果文件放置在src路径下,使用上述方法是读不出来的,必须使用类加载器,类加载器去读取资源的默认路径是src主目录
标签:
原文地址:http://www.cnblogs.com/bobodeboke/p/4577066.html