-
加入购物车的需求
若使用request域来存储放在购物车中的内容,则存在一个问题,request的生命周期只有一次请求,只能加入一个商品,不能加入多个商品。 -
使用servletContext域的问题
servletContext域的生命周期比较长,服务器启动时创建,服务器关闭时销毁,容易导致各个浏览器之间的数据混淆,浪费服务器存储空间 -
cookie会话
1.请求时
在servlet当中主动把商品保存到cookie当中,cookie时浏览器当中的一个缓存区域
2.在结算请求时
把浏览器缓存中存放的数据发送给服务器
3.访问
在第一次访问中,请求头当中没有cookie,但是相应当中会看到set-cookie,再一次访问时,请求头当中就能够看到cookie信息,访问服务器的任何资源,一般情况下都会把cookie带过去。 -
cookie的使用
//1.创建cookie
Cookie cookie = new Cookie("lk","it666");
//2.响应给浏览器
response.addCookie(cookie);
cookie的存储时间
-
在默认情况下,cookie时会话级别的
打开浏览器,关闭浏览器为一次会话。
如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭时,cookie信息被销毁。 -
设置cookie的存储时间,过期会自动删除
cookie.setMaxAge(20);//时间为20秒
需要在响应给浏览器之前设置存储时间。
设置cookie的携带路径
- 访问某一个资源时,要不要带cookie信息,如果每一外资源都携带,会影响传输速度
- 如果不设置携带路径,默认情况下会在访问创建cookie的web资源相同的路径都会携带cookie信息
http://localhost:8080/10-Cookie-Session/cookieServlet
中的
http://localhost:8080/10-Cookie-Session
的目录下的servlet都会携带cookie信息。 - 设置携带路径
cookie.setPath(String path);
String path有三种写法:
cookie.setPath("/CookiePro/cookieServlet");
//只有访问cookieServlet才携带cookie信息
cookie.setPath("/CookiePro");
//访问指定工程时,才携带cookie信息
cookie.setPath("/");
//访问服务器下部署的所有工程时都会携带cookie,使用较少
- 删除cookie信息,将该cookie的生命周期设置为0即可。
- 获取cookie(掌握)
通过Request对象的getCookies()方法
//获取所有的cookies
Cookie[] cookies = request.getCookies();
//判断cookies是否为空
if(cookies != null) {
//取出每一个cookie
for (Cookie cookie : cookies) {
//判断名字是否是自己的
String name = cookie.getName();
if(name.equals("lk")) {
response.getWriter().write(" lk = value "+cookie.getValue());
}
}
}