Servlet操作Cookie制作工具类以及Cookie的生命周期

Cookie就是啥,不错,就是小甜饼的意思,我发现这个名字是很可以代表Cookie的特点的。
在java中操作Cookie的逻辑和其他的语言没有太大的区别,唯一的不同之处应该是取值方面有一些不同。

操作Cookie的逻辑是:

1:创建Cookie对象,注意中文需要转码

2:设置Cookie对象的最大生命周期,当然也可以不设置

3:保存Cookie对象

在这三个的过程中,还是有一些问题需要说的:

首先,在创建Cookie中,每一个Cookie都要重新建立Cookie对象,Cookie对象内的参数即时键值对的方式,前者为名后者为值另外关于设置Cookie的最大生命周期,如果不设置Cookie的最大生命周期,那么他的生命周期就是浏览器一次会话结束的过程,这里的Cookie对象是不保存在外部的Cookie外部文件夹的,但是如果设置了最大生命周期,那么Cookie的生命周期就是自己所设置的,而Cookie对象也是会保存在外部文件里面去的。而不会随着会话的结束而结束。

同样的,Cookie的保存同样的也是每次创建Cookie每次都要进行保存。

其实上面的步骤可以进行加以简化,把他们封装工具类。具体的java代码如下:

package com.xuning.conversation.tools;


import java.io.UnsupportedEncodingException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
 * 说明默认必须以utf-8为字符编码
 */
public class CookieTools extends HttpServlet{
	private Cookie cookie;
	//cookie成员变量Cookie的get方法
	public Cookie getCookie() {
		return cookie;
	}
	//Cookie成员变量的post方法
	public void setCookie(Cookie cookie) {
		this.cookie = cookie;
	}
	//无参构造函数
	public CookieTools(){}
	
	/*
	 * 添加一个英文值的Cookie
	 * 参数:键:值,
	 */
	public void AddOneEnCookie(String CookieName,String CookieValue, HttpServletRequest request, HttpServletResponse response){
		this.cookie=new Cookie(CookieName,CookieValue);
		response.addCookie(this.cookie);
	}
	/*
	 * 添加一个英文值带有最大生命周期的Cookie
	 * 参数:键:值,
	 */
	public void AddOneEnCookie(String CookieName,String CookieValue, int MaxCycleTime, HttpServletRequest request, HttpServletResponse response){
		this.cookie=new Cookie(CookieName,CookieValue);
		this.cookie.setMaxAge(MaxCycleTime);
		response.addCookie(this.cookie);
	}
	/*
	 * 接受一个英文值的Cookie
	 * 参数:键
	 */
	public String GetOneEnCookieValue(String CookieName, HttpServletRequest request, HttpServletResponse response){
		Cookie[] CookieArr=request.getCookies();
		for(Cookie CookieTemp:CookieArr){
			if(CookieTemp.getName().equals(CookieName)){
				return CookieTemp.getValue().toString();
			}else{
				continue;
			}
		}
		return null;
	}
	/*
	 * 添加一个中文的Cookie
	 * 参数:键:值
	 */
	public void AddOneCnCookie(String CookieName,String CookieValue, HttpServletRequest request, HttpServletResponse response){
		try {
			this.cookie=new Cookie(CookieName,java.net.URLEncoder.encode(CookieValue,"utf-8"));
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("中文转码错误");
		}
		response.addCookie(this.cookie);
	}
	/*
	 * 添加一个中文的带有最大生命周期的Cookie
	 * 参数:键:值
	 */
	public void AddOneCnCookie(String CookieName,String CookieValue, int MaxCycleTime, HttpServletRequest request, HttpServletResponse response){
		try {
			this.cookie=new Cookie(CookieName,java.net.URLEncoder.encode(CookieValue,"utf-8"));
			this.cookie.setMaxAge(MaxCycleTime);
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("中文转码错误");
		}
		response.addCookie(this.cookie);
	}
	/*
	 * 获取一个中文的带有最大生命周期的Cookie
	 * 参数:键:值
	 */
	public String GetOneCnCookie(String CookieName, HttpServletRequest request, HttpServletResponse response){
		Cookie[] CookieArr=request.getCookies();
		for(Cookie CookieTemp:CookieArr){
			if(CookieTemp.getName().equals(CookieName)){
				try {
					return java.net.URLDecoder.decode(CookieTemp.getValue(),"utf-8").toString();
				} catch (UnsupportedEncodingException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					System.out.println("获取Cookie过程转码失败");
				}
			}else{
				continue;
			}
		}
		return null;
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值