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代码如下:
在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; } }
相关文章推荐
- OC 总结
- U3D 获取inputfield 的内容
- openwrt下加载snmp模块
- 设计模式,会毁了WUI?
- 打印下面由*号组成的图案
- function前面分号是什么用处介绍
- 谷歌大脑科学家 Caffe缔造者 贾扬清 微信讲座完整版
- 一个简单的boot sector程序
- struts2配置文件解读
- LeetCode 124: Binary Tree Maximum Path Sum 树形动态规划
- 3个关于隐形设计的方法
- 三个方法指导交互设计师进行风险预判
- 经济--银行理财操作篇
- Android动画translate、scale、alpha、rotate各属性详解
- 多次调用replaceScene引发的崩溃
- Assert.hasText():断言工具类
- javax.xml.parsers.DocumentBuilderFactory cannot be found 错误
- serverlet 返回json
- java 总结(一)
- 二维码开源项目ZXing在android studio项目中的应用以及portrait竖屏模式的更改