up:: 请求转发与响应重定向
本篇博客的主要内容是:
● 为什么要有Cookie;
● Cookie本地存放地址;
● 如何在程序中设置(添加)Cookie;
● 如何在浏览器中查看Cookie信息;
● 如何在程序中获取Cookie信息;
● 如何设置Cookie时效;
Cookie(小甜饼~~~)
一个小例子:例如平常登录一个网易邮箱时,如果选择“十天内免登录”,登录后,关闭浏览器;重新打开浏览器,会发现网易邮箱的登录状态并没有消失。
其底层的实现原理是,网易邮箱网利用了Cookie技术,存放了用户的登录信息;浏览器二次访问网易邮箱首页时,浏览器会把Cookie中存放的用户登录信息提取出来,并通知服务器说之前这个用户已经登录过了,并不需要重新登录;
“十天内免登录”:这个Cookie只能保存十天,十天以后,将会被浏览器自动清除;
Cookie放在哪儿了?
设置Cookie示例:
下面,设置了Cookie,并将Cookie信息随着response(响应)发回到浏览器端;浏览器将这个Cookie信息保存到本地的文件中;之后每一次请求,request(请求对象)都会包含这个Cookie信息,一并发送到对应的地址上。
Cookie要导入这个包:
效果:
对于上面的过程中,Cookie是否生效嘞?在浏览器中查看Cookie。
获取Cookie
效果:
上面稍微改造下:
效果:
Cookie的时效性怎么弄?:Cookie的默认时效
当Cookie没有设置有效期时,Cookie的有效期就是当前的浏览器窗口:
在上面的例子中,我们先访问了ImoocLoginServlet这个Servlet,我们是在这个Servlet中设置的Cookie,然后在没有关闭浏览器的情况下,又访问了ImoocIndexServlet这个Servlet,在这个Servlet中我们访问了Cookie;
因为没有关闭浏览器,所以ImoocLoginServlet设置的Cookie信息会有效,ImoocIndexServlet能正常访问到Cookie信息;
但一旦,我们关闭了浏览器,重新打开浏览器,直接访问ImoocIndexServlet时:报错了,Cookie失效了
其实,上面报了空指针异常,其实cs这个数组是空的(因为所有的Cookie信息都失效了),会引发空指针异常了;
所以上面的程序可以改一下,增强健壮性:
上面程序处理了可能出现的错误情况,此时再访问时:
怎么设置Cookie时效:
此时先访问ImoocLoginServlet,先让浏览器将Cookie信息保存;
关闭浏览器:然后重启,访问ImoocIndexServlet:结果,发现Cookie并没有因为关闭了浏览器而失效,因为我们把其时效性设置成了7天;
cookie是保证用户会话(Session)的基础;
注解:
(1)cookie(大概率)也是浏览器自动创建的,浏览器会有一个存放所有Cookie对象的列表:然后我们也可以通过Cookie cookie = new Cookie(“user”,“admin”);自己创建一个cookie,然后通过response.addCookie(cookie); 响应返回给浏览器,然后浏览器会把这个返回的cookie添加到自己维护的cookie列表中;然后可以通过Cookie[] cs = request.getCookies();获得所有cookie的列表
(3)换句话说,Cookie是浏览器创建和维护的;这是个特殊的Java对象,这些对象有很多属性和方法,我们可以按需调用;