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

参考一百度文库:    java

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

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

            Cookie theCookie=new Cookie("username","Tom");浏览器

            response.addCookie(theCookie);服务器

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

    2. 服务器从浏览器读Cookie:若是读取来自客户端的Cookie,能够经过如下方式从HTTP请求中取得全部的Cookie值app

            Cookie cookie[]=request.getCookies();dom

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

    对于每个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);

相关文章
相关标签/搜索