您的位置:首页 > 其它

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

2015-09-02 15:53 519 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: