servlet设置cookie实验

12 篇文章 0 订阅
10 篇文章 1 订阅

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值