目前,在Java web开发中常采用cookie和session来实现状态信息的保存。作用域对象的主要作用是充当容器将某些有用的属性信息保存下来,供整个Web应用不同的Servlet或者JSP等组件共享。
Cookie
Cookie编程要用到Servlet API中提供的类javax.servlet.http.Cookie,接口javax.servlet.http.HttpServletRequest和javax.servlet.http.HttpServletResposne中的部分方法。
1、创建cookie对象
Cookie cookie=new Cookie(Strin name,String value);
2、设置cookie属性
cookie.setMaxAge(3600);//设置cookie的存活时间为1小时
3、发送cookie对象
response.add(cookie);
4、读取cookie
Cookie[] cookies=req.getCookies(); for(int i=0;i<cookies.length;i++){ if(cookies[i].getName().equals("username")){ Username=cookies[i].getValue(); out.println("welcome,"+username+"!"); break; } }
5、修改cookie
cookie.setValue("st");
6、删除cookie
cookie.setMaxAge(0);
cookie的缺点
安全性差,cookie在个人计算机硬盘上所保存的文本信息是明文格式存储的,没有任何的加密措施,可以被任意篡改和删除;
其次,用户可以让浏览器禁用cookie,所以通过cookie保存的信息不应是服务器程序运行必须的信息。
最后,cookie存储数据大小及数量是有限制的。
Session
1、创建session
HttpSession session = request.getSession(true);
当request中不包含有效的session时,会创建一个session对象,该对象拥有一个会话的key即sessionid,它是由tomcat服务器管理,由ManagerBase类创建,其组成是:随机数+时间+jvmid。当session创建好后会自动将sessionId作为一个cookie对象绑定到response,随response发送给浏览器。
浏览器接收session后,会在后续每次访问该session管理的域时携带该sessionId。
2、session结束
1)主动关闭
session.invalidate();
2)会话超时
会话默认的超时时间是30分钟
方法1:在web.xml中配置,该配置对web应用中所有session有效。
<session-config> <session-timeout>10</session-timeout> //这里设置的时间单位是分钟 </session-config>
方法2
session.setMaxInactiveInterval(3600); //设置时间是1小时
3)浏览器关闭
关闭IE浏览器可以销毁当前Session会话,对于其它浏览器不一定适用
作用域对象
ServletContext
ServletContext对象在web应用启动时创建,web应用停止时销毁,其中保存的信息存在范围为整个Web应用。ServletContext对象英语一个Web应用来说时唯一的,ServletContext对象中一般存放一些Web应用中所有用户都要使用,并且在整个web应用运行过程中一直要使用的数据。
HttpSession
HttpSession对象在客户端发起一个信道会话时创建,在会话结束时销毁,其中保存的信息存在范围为整个会话中。HttpSession对象中不宜存放过多数据,在整个会话中经常需要使用的数据以及在进行客户端重定向时需要传递数据时,一般将数据放在HttpSession对象中。
ServletRequest
ServletRequest对象在客户端浏览器发起请求时创建,服务器端向客户端做出响应时结束,其中保存的信息存在范围为这次请求响应过程中。在进行服务器内部跳转时,一般都会将需要传递的数据放在ServletRequest对象中。
ServletContext、HttpSession、ServletRequest对象的作用域依次变小,在能够满足要求的情况下,应尽可能选择小的作用域对象使用。
从作用域对象中获取指定参数的信息,如果参数不存在则返回null。
三者没有包含关系,也不能相互取值。