第六章:Servlet——HTTP的状态处理:cookie编写(2)

本文详细介绍了Java Web中Cookie的工作原理及使用方法,包括如何创建、读取、修改及删除Cookie,同时还深入探讨了Cookie的共享范围设置,如设置path和domain属性。

参考一百度文库:    

 Cookie主要由Servlet容器来完成,用javax.servlet.http.Cookie类来实现,每一个Cookie对象包含一个Cookie名字和Cookie值,类似于map键值对。

    1. 服务器写Cookie到浏览器:创建一个Cookie对象,然后调用HttpServletResponse对象的addCookie()方法,将Cookie添加到HTTP响应结果中,即将cookie写到客户端浏览器上。

            Cookie theCookie=new Cookie("username","Tom");

            response.addCookie(theCookie);

    在Cookie构造方法中,第一个参数是Cookie的名字,第二个参数为Cookie值.

    2. 服务器从浏览器读Cookie:如果读取来自客户端的Cookie,可以通过以下方式从HTTP请求中取得所有的Cookie值

            Cookie cookie[]=request.getCookies();

        该方法返回一个Cookie数组,如果HTTP中没有任何Cookie,那么getCookie返回null。

    对于每一个Cookie对象,可以调用getName()方法来获得Cookie的名字,然后调用getValue()方法获得Cookie的值.

        if(cookie!=null){

         for(int i=0;i<cookie.length;i++){

         out.println("Cookie name:"+cookie[i]);

         out.println("Cookie value:"+cookie[i].getValue());

         }

        }

    3.当Servlet向客户端写Cookie时,可以通过Cookie类的setMaxAge(int expiry)方法来设置Cookie的有效期,参数expiry以秒为单位,它具有以下含义:

如果expiry大于零,就指示浏览器在客户端硬盘上保存Cookie的时间为expiry秒;

如果expiry等于零,就指示删除当前的Cookie;

如果expiry小于零,就指示浏览器不要把Cookie保存到客户端硬盘.Cookie仅仅用于当前的浏览器进程中,当浏览器进程关闭,Cookie就得消失;

        Cookie的默认值为-1,对于来自客户端的Cookie,Servlet首先通过Cookie类的getMaxAge()方法来读取Cookie的有效期;

    修改名为Tom的Cookie值,修改为Jack

if(cookie.getValue().equals("Tom")){

cookie.setValue("Jack");

response.addCookie(cookie);

}

    删除名为Jack的Cookie值

if(cookie.getValue().equals("Jack"))

{

cookie.setMaxAge(0);

response.addCookie(cookie);

}

4.恭喜Cookie

    如果服务器A上面有两个应用app1,app2,同时在服务器B上有一个应用app3,用户通过同一个浏览器访问app1,app2,app3应用,假设在app1应用的Web组件X在浏览器上保存了一个Cookie,当再次请求访问app1,app2,app3,应用中的其他组件时,只有app1应用的web组件能读取该Cookie,如果想要改变Cookie的共享范围,那么app1应用的web组件的X在写Cookie时,可以通过setPath(String path)和setDomain(String domain)方法来设置Cookie的path和domain属性.

1.让同一个Tomcat服务器A中的app1应用和app2应用共享Cookie,app1应用中的Web组件X的写Cookie的代码如下:

Cookie cookie=new Cookie("username","Tom");

cookie.setPath("/");

response.addCookie(cookie);

以上设置setPath()参数为"/",表示Tomcat服务器的根路径,因此同一个服务器上的所有Web应用可以共享上述Cookie.

2.只能让Tomcat服务器A的app2应用访问Cookie,app1应用中的Web组件X的写Cookie的代码如下:

Cookie cookie=new Cookie("username","Tom");

cookie.setPath("/app2/");

response.addCookie(cookie);

以上设置setPath()参数为"/app2",表示Tomcat服务器A的app2应用可以访问Cookie,app1应用也无法访问该Cookie.


3.只能让Tomcat服务器A的app1的应用中位于"/sub"子路径下的Web组件访问Cookie,app1应用的Web组件X的写Cookie的代码如下:

Cookie cookie=new Cookie("username","Tom");

cookie.setPath("/app1/sub/");

response.addCookie(cookie);

以上设置setPath()参数为"/app1/sub/",表示Tomcat服务器A的app1应用的位于"/sub"子路径的组件可以访问Cookie.

4.让Tomcat服务器B上的所有WEb应用访问Cookie,假定Tomcat服务器B的域名为为"www.cat.com",app1应用中的Web组件X的写Cookie的代码如下:

Cookie cookie=new Cookie("username","Tom");

cookie.setDomain(".cat.com"); //该参数必须以"."开头

cookie.setPath("/app3/");

response.addCookie(cookie);

转载于:https://my.oschina.net/u/1014520/blog/223788

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值