31. cookie不是特别重要,但是概念特别重要。为什么要写cookie,有些网站,是不是问你记不记住密码,可以在客户端存一点信息,这个纯文本的,不能存太多。比如一千万个人同时购物,那要浪费多少资源啊,你购物的信息,如果全保存在客户端,你点确认,就把你的购物信息发到服务器上去。
cookie 默认为当前目录,换一个用户登录,window别人就读不到你那些信息了。你到c盘里面去看一下,是不是当前用户登录有一个cookie文件夹,还有一个All User目录下面也有一个cookie文件夹,Default User下面也有,我的机器 上没有,系统 不同啊,标准的系统应该有。盗版改装的系统嘛 。
cookie只能是文本,不能是其它的。
cookie也是有生命周期的。什么密码半个月有效,半个月之后就把密码自动删除,还有一种cookie,只根当前窗口绑定的,你把窗口一关,cookie就没有了。
就是键值对。
32. 怎么写cookie:请看下面
public class SetCookies extends HttpServlet{
public doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
Cookie c1 = new Cookie("username","zhangsan"); 不支持中文。张三
//使用response往回写
response.addCookie(c1);//就相当于把信息写到客户端
//先这样写吧,以后再加密,不加密就属于明文,
Cookie c2 = new Cookie("password","123");
c2.setMaxAge(3600);//设置生命周期为一个小时,单位为秒
response.addCookie(c2);
response.getWriter().println("设置成功");
}
}
在地址栏一运行这个servlet就会在当前用户登录的cookie下生成一个文件,注意不设置生命周期的话,在内存里面,窗口一关就没了,那也就是说默认的生命周期是当前窗口啊,你看上面username没有设置,你到c盘的当前用户的cookie文件夹把生成的这个文件打开 ,里面是不是没有username的属性。
生命周期不设,就不存。设置生命周期就会持久化,不持久化,窗口一关,就没了。
33. 现在来读cookie: 明白这个过程,现在是在服务器端写代码,要把cookie从客户端发送到服务器,就是一个request的过程。
public class ShowCookies extends HttpServlet{
public doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
Cookie[] cookies = request.getCookies(); //得到的是一个cookie的数组
for(itn i=0;i<cookies.length;i++){
response.getWriter().println(cookies[i].getName() + "," + cookies[i].getValue());
}
//以后做不用你输入用户名和密码,自动填上。
}
注意,在同一个窗口中,先运行那个设置cookie的servlelt,再运行这个可以显示cookie的servlet,就可以看到usernaem的值,如果这个窗口只是设置,再开一个窗口,去show的话,不会看到usernaem,因为服务器会认为是不同的人来访问,而你又没有设置cookie所以 没有任何信息显示。
运行显示的效果为:username zhangsanpassword 123JSESSIONID C0052B40717D0A258BD372F9D19AE878后面多了一串东西,现在不知道是什么原因。
开两个窗口就相当于两个人一样
34. 由他写的代码可以看出,如果脱离的eclipse的话,要你去建servlet的话,就是一个类,继承HttpServlet,doGet()方法,然后一定要记得到web.xml文件中把这个配上。
写servlet就继承HttpServlet类,然后写上你要请求的方法是doGet 还是doPost就写这两个方法就可以了,他要么就写其中的一个。
35. 现在来看session,与cookie刚好相反,这个是放服务器,cookie和session是有关系的,是根据什么有关系的,主要是根据http协议的。
session跟cookie类似,也跟窗口绑定,通过这个servlet设置的session,无法再开一个窗口来显示session中的值。