一、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/路径下,
同一个浏览器,同一个窗口访问同一个服务器下的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。