2、演示Cookie的访问权限
index.jsp:
<a href="servlet/CookieDemo2">演示Cookie的访问权限</a><br/>• 1
web.xml:
<servlet> <servlet-name>CookieDemo2</servlet-name> <servlet-class>cn.hncu.servlets.CookieDemo2</servlet-class> </servlet> <servlet-mapping> <servlet-name>CookieDemo2</servlet-name> <url-pattern>/servlet/CookieDemo2</url-pattern> </servlet-mapping>
CookieDemo2.java:
package cn.hncu.servlets; import java.io.IOException; import java.io.PrintWriter; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CookieDemo2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); //向客户端写Cookie Random r = new Random(); int n =r.nextInt(100); Cookie c = new Cookie("age", ""+n); c.setMaxAge(60*60);//过期时间 c.setPath( request.getContextPath()+"/servlet/CookieDemo2" );//Cookie机制中,是通过path来控制权限的 //由于CookieDemo的url-pattern是项目根目录/CookieDemo,不是当前cookie所设路径的子目录,因此无法访问到该cookie //注意!!!path不一样,那么cookie是不同的对象,也就是不会覆那个名字相同的cookie! response.addCookie(c); //读取从客户端发来的cookie Cookie cs[] = request.getCookies(); if(cs!=null){ for(Cookie cc:cs){ String name = cc.getName(); String val = cc.getValue(); out.print("22222--"+name+"="+val+"<br/>"); } } out.print("Cookie保存成功!"); } }
演示结果:
先进入CookieDemo2的页面,能访问到CookieDemo的name-cookie
再进入CookieDemo的页面,不能访问到CookieDemo2的age-cookie
3、演示Cookie的删除
index.jsp:
<a href="servlet/DelCookieDemo"> 演示Cookie的删除 </a><br/>• 1
web.xml:
<servlet> <servlet-name>DelCookieDemo</servlet-name> <servlet-class>cn.hncu.servlets.DelCookieDemo</servlet-class> </servlet> <servlet-mapping> <servlet-name>DelCookieDemo</servlet-name> <url-pattern>/servlet/DelCookieDemo</url-pattern> </servlet-mapping>
DelCookieDemo.java:
package cn.hncu.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DelCookieDemo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); Cookie cs[] = request.getCookies(); if(cs!=null){ for(Cookie c:cs){ //要想遍历到"name"这个cookie,当前servlet必须要有读的权限,即servlet的url-pattern必须是该cookie所设路径或者是其所设路径的子路径 //删除name这个cookie if("name".equals(c.getName())){ c.setPath( request.getContextPath() );//删除时是通过这一句来判断权限的!这里必须和原来所设的路径完全一样才能删除,否则不能删除! //对于上句,我的个人理解是:因为如果你这个路径设置不同了,其实只是相当与新开了一个cookie,这个新cookie的到期时间是0,name是"name" c.setMaxAge(0);//到期时见设为0,即是删除---此处只是设置删除标识 response.addCookie(c); } } } } }
演示结果:
这个时候,name还存在的。
我们访问DelCookieDemo.
再去第一个链接看:
name已经没有了!
火狐会自动删除过期的cookie: