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