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

【黑马程序员】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

CookiePath1

com.itheima.cookie.CookiePath1

CookiePath1

/path1

CookiePath2

com.itheima.cookie.CookiePath2

CookiePath2

/path2

22 23 24 25 26 27 28 29

CookiePath3

com.itheima.cookie.CookiePath3

CookiePath3

/path3

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 名称获取cookie

Cookie 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 名称获取cookie

Cookie 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 /path2/path3 之后,在进行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 设置为”/”。(比如访问路径是localhost:8080),那么cookie 的默认path 值是“/”

相关主题
相关文档
最新文档