一、 servlet的会话技术
HTTP协议无连接,无状态,无法去保存会话中产生的数据
如记住密码,记住一周两周等
要想保存整个会话过程中产生的数据,利用会话技术来实现Servlet提供的会话技术有cookie和session
1.1 Cookie是客户端的会话技术
Session是服务端的会话技术
//从request对象中获取cookie所有数据
Cookie[] cookies = request.getCookies();
Boolean visited = false;
if(cookies != null){
for(Cookie s : coolies){
if(cookie.getName().equals("visited")){
out.write(欢迎回到。。。)
visited = true;
}
}
}
if (visited = false){
//创建cookie对象,cookie数据是以键值对(key和value都使用英文,不要使用中文,虽然value可以使用中文)的形式存放在客户端(浏 览器),并且只能保存字符串
out.write(欢迎来到。。。)
Cookie cookie = new Coolie(key,value);
//添加cookie前可以设置cookie的有效时间
cookie.setMaxAge(60**60*24*7)//单位是秒
//可以添加多个cookie
response.add(cookie);
//下一次请求,就会把cookie数据带过去
}
//如果是要删除一个coolie,将cookie的有效时间设置为0;或者通过浏览器的设置手动清除浏览器数据
cookie.setMaxAge(0);
练习:使用cookie实现用户名和密码的保存
1.登录页面由servlet进行构建(第一次访问时,要用户输入用户名和密码)有个CheckBox记住密码,如果用户选择了记住密码,需要另外一个servlet去实现,就去创建cookie记录用户名和密码;如果没有选就不记住密码
注意:CheckBox勾选返回的是String类型的on,不勾选返回的是null
1.2 session (利用了cookie的技术)
了解session的原理
找到session对象,就能在session里实现数据共享
默认session有效时间是30分钟
getSession(true):没有session会创建
getSesson(false):没有session不会创建
设置最大非活动存活时间
让session中数据不共享,将其中数据移除
禁用cookie时重写url(实则在请求中添加了jsessionid=response.encodingURL)实现session的共享
1.3 作用域
1.request
在一个完整的请求中共享数据,通常指的是就是请求转发时可以共享数据
request.setAttribute()
request.getAttribute()
request.removeAttribute()
2.session
3.application(不同的客户端看到的都是一样的,如论坛帖子的浏览量,每个人都可以看到)
服务器关了就停止了,可以在关闭服务器之前把数据写入文件中
- 练习:
实现一个在线人数统计