当前位置:文档之家› 【黑马程序员】Cookie的path设置以及默认取值说明

【黑马程序员】Cookie的path设置以及默认取值说明

【黑马程序员】Cookie 的path 设置以及默认取值说明在JaveEE 课程中,我们Cookie 的API 学习主要集中在name 、value 、maxAge 的使用,针对path 的讲解比较少,下面,将对Cookie 中的path 进行简单的阐述。

setPath 的API 说明public void setPath(String uri)指定客户端应该返回 cookie 的路径。

cookie 对于指定目录中的所有页面及该目录子目录中的所有页面都是可见的。

cookie 的路径必须包括设置 cookie 的 servlet ,例如 /catalog ,它使 cookie 对于服务器上 /catalog 下的所有目录都是可见的举例如下:01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 <!-- 准备三个servlet 。

CookiePath1是设置path 的值CookiePath2是获取path 的值CookiePath3是获取path 的值--><servlet ><servlet-name >CookiePath1</servlet-name ><servlet-class >com.itheima.cookie.CookiePath1</servlet-class ></servlet ><servlet-mapping ><servlet-name >CookiePath1</servlet-name ><url-pattern >/path1</url-pattern ></servlet-mapping ><servlet ><servlet-name >CookiePath2</servlet-name ><servlet-class >com.itheima.cookie.CookiePath2</servlet-class ></servlet ><servlet-mapping ><servlet-name >CookiePath2</servlet-name ><url-pattern >/path2</url-pattern ></servlet-mapping >22 23 24 25 26 27 28 29 <servlet ><servlet-name >CookiePath3</servlet-name ><servlet-class >com.itheima.cookie.CookiePath3</servlet-class ></servlet ><servlet-mapping ><servlet-name >CookiePath3</servlet-name ><url-pattern >/path3</url-pattern ></servlet-mapping >01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 /*** CookiePath1作用:new 一个cookie 并回写到浏览器* 使用最简单的servlet 设置cookie 的path 为/urlPattern/path2*/public class CookiePath1 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Cookie cookie = new Cookie("demo1", "value1");//设置path 为"/urlPattern"cookie.setPath("/urlPattern/path2");//将cookie 回写到 浏览器response.addCookie(cookie);response.getWriter().write("cookie return OK");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}通过访问path1(http://localhost:8080/urlPattern/path1),将cookie 回写到浏览器,响应如下:01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 /*** url-pattern 为 /path2* 获取cookie 值*/public class CookiePath2 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//根据cookie 名称获取cookieCookie cookie =CookieUtil.getNamedCookie(request.getCookies(),"demo1");if (cookie != null ){String value = cookie.getValue();System.out.println("得到cookie(demo1)的值是:" + value); }}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}访问path2路径(localhost:8080/urlPattern/path2),尝试获取cookie 信息。

控制台输出如下:01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 /*** url-pattern 为 /path3* 获取cookie 值*/public class CookiePath3 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//根据cookie 名称获取cookieCookie cookie =CookieUtil.getNamedCookie(request.getCookies(),"demo1");if (cookie != null ){String value = cookie.getValue();System.out.println("得到cookie(demo1)的值是:" + value); }}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}访问path3路径(localhost:8080/urlPattern/path3),尝试获取cookie 信息。

控制台无打印。

说明,path3无法获取到名称为demo1的cookie 值。

回到API 中的说明,只有符合该cookie 设置的path 或者子目录,才可以访问。

我们将path3的url-pattern 拦截路径更改成1 <url-pattern >/path2/path3</url-pattern > 之后,在进行path3访问(localhost:8080/url-pattern/path2/path3),控制台可以打印cookie 数据,并且在请求中也可以看到该cookie path 的默认取值规则:当new 一个Cookie 回写到浏览器,但是并且没有设置path 时,有如下的path 默认值。

(1) 当URI 的path 值是以“/”结尾的时候,直接设置为cookie 的path 值(2) 当URI 的path 值不是以“/”结尾的时候,查看path 里面是否有“/”如果有“/”的话,直接截取到最后一个“/”,然后设置为cookie 的path 值。

举例说明: 1 2 3 4 Cookie cookie = new Cookie("demo1","value1");//将cookie 回写到 浏览器response.addCookie(cookie);response.getWriter().write("cookie return OK");那么,响应的cookie 截图如下:如果没有“/”的话,将cookie 的path 设置为”/”。

相关主题