【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还有其他东西,比如生命周期....... 大家可以参考其他资料