Servlet学习之Cookie详解

Cookie详解

Cookie特点

Cookie技术会话数据保存在浏览器客户端

Cookie常用的方法

Cookie类:用于存储会话数据(服务器创建Cooike,然后把Cookie发送到浏览器保存起来)


构造Cookie对象

  • Cookie(String name, String value);

  • Cookie(String name, String value, String path, Stringdomain[域对象])

  • Cookie(String name, String value, String path, Stringdomain[域对象],int version[版本])

发送cookie到浏览器端保存

HttpServletResponse  respone=null;

                   respone.addCookie(Cookie cookie); 将指定cookie添加到响应。

服务器接收客户端发送的cookie

HttpServletRequest request=null;

                   Cookie[ ]request.getCookies()   返回一个数组,其中包含所有的Cookie对象的客户端发送请求。

注意点:

         1,当服务器向浏览器发送Cookie的时候,会默认把cookie的信息放在响应头中。


2,浏览器接收到服务器发送的cookie,会自动将cookie的信息保持起来


3,浏览器再次向服务器发送请求的时候,会默认将所有保存的cookie信息放到请求头中再次提交给服务器


Cookie  的细节

(1) setPath(String uri)

注释:Specifies a path for the cookie to which the client should returnthe cookie.( 指定一个路径为客户端应该返回)

设置Cookie的有效访问路径。有效路径指的是Cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时就会带着Cookie信息,否则不带Cookie信息。

如果不写setPath,则默认是当前的项目路径。

(2)voidsetMaxAge(intexpiry) : 设置cookie的有效时间。

            正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。

            负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!

             零:表示删除同名的cookie数据

(3)Cookie数据类型:只能保存非中文字符串类型的。可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

源码分享:

protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	// 创建Cookie对象
	Cookie cookie1 = new Cookie("name", "tom");
	Cookie cookie2 = new Cookie("email", "tom@qq.com");

	cookie1.setPath("/servlet_study/CookieServlet2");
	cookie2.setPath("/servlet_study");
	// 再次访问http://localhost:8080/1.16Pro/CookieDemo1的时候,只有cookie1的信息会发送给服务器
	// 再次访问http://localhost:8080/1.16Pro/的时候,cookie1和cookie2的信息都会发送给服务器

	// cookie1 20秒之后过期(20秒指的是从最后一次访问的时间开始算起)
	cookie1.setMaxAge(20);
	// 关闭浏览器cookie2就消失
	cookie2.setMaxAge(-1);
	// 删除cookie2,将cookie2发送到浏览器的时候,浏览器存的cookie2的信息会立马过期
	cookie2.setMaxAge(0);
	// 将cookie发送到浏览器
	response.addCookie(cookie1);
	response.addCookie(cookie2);
}

运行结果:



细节分细:(了解)

Servlet Cookie 处理需要对中文进行编码与解码,方法如下:(该方法已经过时)

String str = java.net.URLEncoder.encode("中文"); // 编码

String str = java.net.URLDecoder.decode("编码后的字符串"); // 解码

一,通过Servlet设置Cookie

分为以下三个步骤:

1,创建一个Cookie对象:您可以调用带有cookie名称和cookie值得Cookie构造方法,cookie名称和cookie值都是字符串

Cookie cookie=new Cookie("key","value");

注意:

无论是名字还是值,都不应该包含空格或以下任何字符

[] () = , " / ? @ : ;

2,设置最大生存周期:您可以使用setMaxAge  方法来指定cookie 能够保持有效的时间(以秒为单位)。以下将设置一个最长有效期为24小时的cookie

cookie.setMaxAge(60*60*24);

3,发送cookie到http响应头:您可以使用response.addCookie  来添加HTTP响应头中的Cookie,如下所示:

response.addCookie(cookie);

源码及截图

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>设置Cookie</title>
</head>
<body>
	<form action="/servlet_study/CookieTest" method="get">
		<table style="border: 1px solid:black;">
			<tr>
				<td>用户名:</td>
				<td><input type="text" name="name" id="name"></td>
			</tr>
			<tr>
				<td>网址:</td>
				<td><input type="text" name="url" id="url"></td>
			</tr>
			<tr>
				<td colspan="2"><input type="submit" value="提交"></td>
			</tr>
		</table>
	</form>
</body>
</html>

页面运行截图


CookieTest   Servlet类代码

package com.china.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/CookieTest")
public class CookieTest extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public CookieTest() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 为姓名和网址创建Cookie对象
		Cookie name = new Cookie("name", request.getParameter("name"));
		Cookie url = new Cookie("url", request.getParameter("url"));
		// 为两个Cookie设置有效时间
		name.setMaxAge(24 * 60 * 60);
		url.setMaxAge(24 * 60 * 60);
		// 在响应头中添加两个Cookie
		response.addCookie(name);
		response.addCookie(url);
		// 设置响应内容内型
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		String title = "我是设置Cookie的测试程序";
		String doctype = "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n";
		out.println(doctype + "<html>\n" + "<head><title>" + title + "</title></head><body>用户名:"
				+ request.getParameter("name") + "<br/>网址:" + request.getParameter("url") + "</body></html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
输入网址: http://localhost:8080/servlet_study/testCookie.jsp
运行结果:


通过 Servlet 读取 Cookie

要读取 Cookie,您需要通过调用 HttpServletRequest 的 getCookies( ) 方法创建一个 javax.servlet.http.Cookie 对象的数组。然后循环遍历数组,并使用 getName() 和 getValue() 方法来访问每个 cookie 和关联的值。

源码演示及截图

package com.china.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/GetCookie")
public class GetCookie extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public GetCookie() {

	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Cookie cookie = null;
		Cookie[] cookies = null;
		// 获取与该域相关的Cookie的数组
		cookies = request.getCookies();
		// 设置响应内容内型
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		String title = "getCookie  值的实例";
		String dohtml = "<!DOCTYPE html>\n";
		out.println(dohtml + "<html>\n<head><title>" + title + "</title></head><body>");
		if (cookies != null) {
			out.println("<h2>Cookie名称和值是:</h2>");
			for (int i = 0; i < cookies.length; i++) {
				cookie = cookies[i];
				if ((cookie.getName()).compareTo("name") == 0) {
					cookie.setMaxAge(0);
					response.addCookie(cookie);
					out.print("已删除的 cookie:" + cookie.getName() + "<br/>");
				}
				out.println("名称:" + cookie.getName() + ",");
				out.println("值:" + cookie.getValue() + "<br/>");
			}
		} else {
			out.println("<h2 class=\"tutheader\">No Cookie founds</h2>");
		}
		out.println("</body>");
		out.println("</html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
截图:
输入以下网址: http://localhost:8080/servlet_study/GetCookie





补充:

cookie是如何工作的:(掌握)

1.第一次请求服务器的时候,在服务器创建一个cookie对象,然后将该cookie对象加到响应头中,发送到浏览器

2.浏览器接收到服务器发送过来的cookie信息之后,会将该cookie信息保存起来

3.当浏览器再次向服务器发送请求的时候,会自动将所有保存的cookie信息放到请求头中一起提交到服务器

4.服务器就可以获取来自请求中的cookie数据了


结束。。。?待续。。。。。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值