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;
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章