【README】 本文旨在 通过servlet 设置cookie ,查看cookie长什么样子,来达到了解cookie的目的;
cookie作用: 因为http协议是无状态的,要想维护web访问的状态,就需要使用专门的技术解决。cookie 是一种在客户端保持 http状态信息的技术;
浏览器第1次访问服务器时,传入个人信息,服务器把这些信息封装到cookie, 返回给客户端;(第1次访问,客户端没有传入 cookie)
浏览器第2次访问服务器时,会带着第1次服务器响应报文中的cookie 传给 服务器,然后服务器通过 客户cookie 信息来获取请求状态; 即把第1次访问和第2次访问当做同一个会话。 只不过这个会话有多个请求和响应。
什么是web中的会话?指的是 浏览器与web服务器之间连续发生的一系列请求和响应过程;
web会话状态: 指web服务器与浏览器在会话过程中产生的状态信息,借助会话状态, 服务器可以把属于同一个会话的一系列请求和响应关联起来,使得他们可以相互依赖,传递和共享数据;
【1】代码,servlet设置cookie (本代码转自张孝祥老师,感谢辛苦付出)
public class CookieServlet1 extends HttpServlet
{public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{response.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();String name = request.getParameter("name");String nickname = request.getParameter("nickname");if(name == null || nickname == null){out.println("请传递参数name和nickname后继续实验!");return;}/*下面的程序代码最好改成如下结构,以增强代码的阅读性:if(…){…return;}…因为笔者在后来校对书稿的过程中,读到下面的if从句时,脑海里面很自然地出现了“if从句执行完后,程序继续干了什么?”的疑问 ,如果在if从句中增加了return语句,显然就不会产生这种疑问。*/if("".equals(name.trim()) || "".equals(nickname.trim())){out.println("name和nickname不能为空白串");}else{Cookie ckName = new Cookie("name",name);Cookie ckNickname = new Cookie("nickname",nickname);ckNickname.setMaxAge(365*24*3600);Cookie ckEmail = new Cookie("email","test1@it315.org");Cookie ckPhone = new Cookie("phone","1111111");response.addCookie(ckName);response.addCookie(ckNickname);response.addCookie(ckEmail);response.addCookie(ckPhone);/*应将下面的代码设计成一个专门用于查询某个名称的Cookie的方法,然后用这个方法来查询名称为nickname的Cookie值。*/String lastNickname = null;Cookie [] cks = request.getCookies();for(int i=0; cks!=null && i<cks.length; i++){if("nickname".equals(cks[i].getName())){lastNickname = cks[i].getValue();break;} } if(lastNickname != null){out.println("欢迎您,<b><i>" + lastNickname + "</i></b>!<br>");}else{out.println("欢迎您,新客人!<br>");}String cookieHeader = request.getHeader("Cookie");if(cookieHeader != null){out.println("请求头中的Cookie头字段如下:<br>");out.println("Cookie: " + cookieHeader + "<br>");}else{out.println("请求头中没有Cookie头字段<br>");}}}
}
【2】访问效果,这是第2次访问的效果, 即服务器显示的是第1次访问时,服务器根据请求信息设置的cookie
访问url: http://localhost:8080/myweb2/cookie/servlet1?name=zhangsan&nickname=zhangsanhao
【3】cookie 长什么样子呢 ?
可以参考这篇文章 https://www.cnblogs.com/Marydon20170307/p/11613226.html
第1步: chrome://settings/cookies
第2步:查看所有cookie 和 网站数据;
第3步: 搜索 localhost 域名的cookie
上图,我们就看到了cookie的真面目,共计4个;
补充: 本文只是简要展示了cookie是什么?作用以及它的样子。 cookie还有其他东西,比如生命周期....... 大家可以参考其他资料