Servlet_9th_Cookie共享与URL的关系

来源:互联网 发布:长沙软件开发公司排名 编辑:程序博客网 时间:2024/06/03 17:53
一、Cookie共享与URL的关系
同一个浏览器,同一个窗口访问同一个服务器下的servletA和servletB,servletB可能无法读取servletA产生的cookie信息,这涉及cookie共享与URL的关系。
通过两个实验来理解一下cookie共享与URL的关系:
1、实验一:
1)在前一篇博文的基础上,将SetCookies.java中的@WebServlet("/SetCookies")更改为:


ShowCookies.java的url地址不要变动。


2)为保证实验结果准确可靠,重启服务器。

3)将IE浏览器的cookies缓存数据清空(清除本地cookie):

工具 -- Internet选项 -- 常规 -- 浏览历史记录 -- 删除 -- Cookie和网站数据 -- 删除,点击确定退出。

4)将所有IE浏览器页面关闭(清除内存中的cookie)。

5)新开一个IE浏览器窗口,访问:http://localhost:8080/TestServlet/Servlet/SetCookies
页面效果:


注意不要点超链接,超链接的链接地址不是我们想要的,
此时访问会链接到http://localhost:8080/TestServlet/Servlet/ShowCookies,显然会报404。

6)在当前窗口地址栏输入:http://localhost:8080/TestServlet/ShowCookies
页面效果:


好像没有任何的cookie,说明req.getCookies()返回的是个null而不是cookie数组。


2、实验二:
1)将SetCookies.java中的@WebServlet("/Servlet/SetCookies")还原为:


ShowCookies.java的url地址改为:


2)重启服务器。

3)同样将IE浏览器中的cookies删除干净,并将所有IE浏览器页面关闭。

4)新开一个IE浏览器窗口,访问:http://localhost:8080/TestServlet/SetCookies


5)在当前窗口地址栏输入:http://localhost:8080/TestServlet/Servlet/ShowCookies


现在ShowCookies可以通过req.getCookies()获取到所有cookie。

总结:
一个servlet/jsp设置的cookies能够被同一个路径下面或者子路径下面的servlet/jsp读到(即共享)。
这里的路径指的是URL,而非真实的文件路径。

理清思路:
①SetCookies产生了cookies,并将cookies放到客户端的硬盘或内存中。

②ShowCookies读取cookies。

③如果SetCookies的路径是/Servlet/SetCookies,即在localhost:8080/WebApp/Servlet/路径下,

而ShowCookies的路径是/ShowCookies,即在localhost:8080/WebApp/路径下,

也就是说后者和前者不在同一路径下,后者也不是前者的子路径,所以后者无法访问到前者产生的cookie。

④如果SetCookies的路径是/SetCookies,即在localhost:8080/WebApp/路径下,

而ShowCookies的路径是/Servlet/ShowCookies,即在localhost:8080/WebApp/Servlet/路径下,

即后者位于前者的子路径下,所以后者能访问前者产生的cookie。






0 0