- 浏览: 670941 次
- 性别:
- 来自: 北京
最新评论
-
mushiyu123:
...
iText官方教程 -
sf_dream:
楼主,你那个放到没有安装jdk的电脑上可以运行不?
eclipse导出jar文件再将它转换成exe可执行文件详解 -
zqb666kkk:
哥们 没图了 弄个附件 文档 供我们下载吧
PowerDesigner 使用教程(很具体,很实用) -
dhkswh:
楼主写的代码超级多错...不过总算看懂了,楼主是class.A ...
java swing 弹出对话框与父窗口传值实例
cookie的操作
学习操作cookie,首先要了解cookie的机制。这个网上优秀的文章太多了。
本篇文章练习如何操作cookie。
说道操作,无非就是“增删改查”四个字。
cookie操作的api很简单,马上先写一个看看。
一,新增cookie
package org.hd.report.action; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import org.rd.framework.struts.action.CommonAction; import com.opensymphony.xwork2.ActionContext; // public class CookieAction extends CommonAction{ public String showcookie() throws Exception{ ActionContext ctx = ActionContext.getContext(); HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组 for(Cookie cookie : cookies){ // cookie.getName();// get the cookie name // cookie.getValue(); // get the cookie value System.out.println("cookie;----名字:"+cookie.getName()+"---值:"+cookie.getValue()+"---路径:"+cookie.getPath()); } Date dd=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Cookie ck = new Cookie("cookie-name-lsy",sdf.format(dd)); ck.setComment("this is the comment from lsy "); // ck.setDomain("lsydoman"); ck.setMaxAge(360); ck.setPath("/haha"); // ck.setVersion(1); System.out.println("服务端设置cookie:"+ck.toString()); response.addCookie(ck); //out.println(ck.toString()); return SUCCESS; } public String execute() throws Exception{ return SUCCESS; } }
在cookie的路径下(也是浏览器临时文件的路径,浏览器中的InterNet选项中,浏览历史记录--设置--当前位置)
打开这个文件内容如下:
cookie-name-lsy
"2012-11-26 17:38:24"
helpdesk.citicsinfo.com/haha
1536
2652032000
30264250
3356876643
30264249
*
---------------------------------------------------------------------------------------------------------------
尝试着修改某些属性值,看看效果:
ck.setPath("/wawa.txt");
得到wawa.txt文件
cookie-name-lsy
"2012-11-26 17:39:15"
helpdesk.citicsinfo.com/wawa.txt
1536
3162032000
30264250
3857085253
30264249
*
---------------------------------------------------------------------------------------------------------------
修改值:
ck.setDomain("helpdesk.citicsinfo.com");
ck.setPath("/dom");
结果出现dom文件
cookie-name-lsy
"2012-11-26 17:40:38"
helpdesk.citicsinfo.com/dom
1536
3992032000
30264250
397875759
30264250
*
---------------------------------------------------------------------------------------------------------------
修改值:
ck.setDomain("xxxxxx");
ck.setPath("/dom2");
结果没有生成cookie文件!
---------------------------------------------------------------------------------------------------------------
修改值:
ck.setDomain("helpdesk.citicsinfo.com");
ck.setPath("/lsy/kk");
结果出现kk文件
(没有出现我预期的先生成lsy文件夹然后再次文件夹下再生成kk,而是直接生成了kk!
但是cookie里面的域名改变了helpdesk.citicsinfo.com/lsy/kk)
cookie-name-lsy
"2012-11-26 18:00:24"
helpdesk.citicsinfo.com/lsy/kk
1536
2967130112
30264253
3668059527
30264252
*
---------------------------------------------------------------------------------------------------------------
在服务端每次都会遍历打印cookie,为了测试数据的准确,我每次都是先把
cookie目录下的东西先删除再做测试的,但是每次都会有一个JSESSIONID出现。
如下:
cookie;----名字:JSESSIONID---值:6B2B5B9F6123D2B156256AB3BE2C849C---路径:null
它的路径是null。
为什么每次都有这个cookie呢?网上搜了一下:
原来是tomcat服务器创建session的cookie。
session的创建需要cookie支持的,看到这里也许明白了,为什么浏览器能识别
服务器的session,原来是服务器在客户端会先创建cookie,把sessionId保存起来,
党浏览器关闭时这个cookie就消失,这样就是session的基本原理。
网上一段文摘:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
所谓session可以这样理解:当与服务端进行会话时,比如说登陆成功后,服务端会为用户开壁一块内存区间,
用以存放用户这次会话的一些内容,比如说用户名之类的。那么就需要一个东西来标志这个内存区间是你的而不是别人的,
这个东西就是session id(jsessionid只是tomcat中对session id的叫法,在其它容器里面,不一定就是叫jsessionid了。),
而这个内存区间你可以理解为session。
然后,服务器会将这个session id发回给你的浏览器,放入你的浏览器的cookies中(这个cookies是内存cookies,
跟一般的不一样,它会随着浏览器的关闭而消失)。
之后,只有你浏览器没有关闭,你每向服务器发请求,服务器就会从你发送过来的cookies中拿出这个session id,
然后根据这个session id到相应的内存中取你之前存放的数据。
但是,如果你退出登陆了,服务器会清掉属于你的内存区域,所以你再登的话,会产生一个新的session了。
这是一个保险措施 因为Session默认是需要Cookie支持的,但有些客户浏览器是关闭Cookie的【而jsessionid是存储在Cookie中的,
如果禁用Cookie的话,也就是说服务器那边得不到jsessionid,这样也就没法根据jsessionid获得对应的session了,获得不了session就
得不到session中存储的数据了。】这个时候就需要在URL中指定服务器上的session标识,也
就是类似于“jsessionid=5F4771183629C9834F8382E23BE13C4C”
这种格式。用一个方法(忘了方法的名字)处理URL串就可以得到
这个东西,这个方法会判断你的浏览器是否开启了Cookie,如果他认为应该加他就会加上去。
session是有一定作用域的,而且是有时间限制的。
jsessionid是服务器那边生成的,因为cookie是服务器那边送到客户端的信息。
不管能不能修改jsessionid,都不应该修改,如果你修改了,这就失去了jessionid的自身意义了,
你修改的话,你让服务器那边如何找到对应的session?找不到的话,你存放在那个session中的数据不是取不到了吗?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
操作cookie很简单,常用的方法也就那么几个:
getDomain();返回cookie的域名.
getMaxAge();返回cookie的存活时间
getName();返回cookie的名字
getPath();返回cookie适用的路径
getSecure();如果浏览器通过安全协议发送Cookie将返回true值,如果浏览器使用标准协议刚返回false值
getValue();返回cookie的值
getVersion();返回cookie所遵从的协议版本
setComment(String purpose);设置cookie的注释
setPath(String url);设置Cookie的适用路径
setSecure(Boolean flag);设置浏览器是否仅仅使用安全协议来发送cookie,例如使用Https或ssl
setValue(String newvalue);cookie创建后设置一个新的值
setVersion(int v);设置cookie所遵从的协议版本.
setDomain(String ss) 设置域.
setMaxAge(int time) 设置失效时间,秒。参数为负数代表关闭浏览器时清除cookie,参数为0时代表删除cookie,参数为正数时代表cookie存在多少秒
Cookie版本:
目前有两个版本:
版本0 : 由Netscape公司制定的,也被几乎所有的浏览器支持. Java中为了保持兼容性, 目前只支持到版本0,
Cookie的内容中不能空格,方括号,圆括号,等于号(=),逗号,双引号,斜杠,问号,@符号,冒号,分号。
版本1 : 根据RFC 2109文档制定的. 放宽了很多限制.
上面所限制的字符都可以使用. 但为了保持兼容性, 应该尽量避免使用这些特殊字符.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
继续修改在value中写入中文,则报错:
严重: Servlet.service() for servlet default threw exception
java.lang.IllegalArgumentException: Control character in cookie value, consider BASE64 encoding your value
因为中文的原因,导致这样的报错。解决如下:
///////////////////////////////////////////
Date dd=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String zhvalue1= java.net.URLEncoder.encode("时间:"+sdf.format(dd),"utf-8");
Cookie ck = new Cookie("cookie-name-lsy",zhvalue1);
String zhvalue2 = java.net.URLEncoder.encode("this is the comment from lsy 你好 xxxxxx","utf-8");
ck.setComment(zhvalue2);
ck.setDomain("helpdesk.citicsinfo.com");//helpdesk.citicsinfo.com
ck.setMaxAge(360);
ck.setPath("/chinese1");
//ck.setVersion(1);
System.out.println("服务端设置cookie:"+ck.toString());
response.addCookie(ck);
使用java.net.URLEncoder后,如上
出现chinese1文件,内容:
cookie-name-lsy
%E6%97%B6%E9%97%B4%EF%BC%9A2012-11-27+09%3A28%3A37
helpdesk.citicsinfo.com/chinese1
1536
1551381632
30264383
2251867240
30264382
*
二,读取cookie
把代码修改如下:
import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import org.rd.framework.struts.action.CommonAction; import com.opensymphony.xwork2.ActionContext; // public class CookieAction extends CommonAction{ public String addcookie() throws Exception{ ActionContext ctx = ActionContext.getContext(); HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); /////////////////////////////////////////// Date dd=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String zhvalue1= java.net.URLEncoder.encode("时间:"+sdf.format(dd),"utf-8"); Cookie ck = new Cookie("cookie-name-lsy",zhvalue1); String zhvalue2 = java.net.URLEncoder.encode("this is the comment from lsy 你好 xxxxxx","utf-8"); ck.setComment(zhvalue2); // ck.setDomain("helpdesk.citicsinfo.com");//helpdesk.citicsinfo.com ck.setMaxAge(3600); ck.setPath("/chinese12"); // ck.setPath("/"); // ck.setVersion(1); System.out.println("服务端设置cookie:"+ck.toString()); response.addCookie(ck); return SUCCESS; } public String showcookie() throws Exception{ ActionContext ctx = ActionContext.getContext(); HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); System.out.println("request.getContextPath:"+request.getContextPath()); Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组 for(Cookie cookie : cookies){ System.out.println("cookie----名字:"+cookie.getName()); System.out.println("值:"+cookie.getValue()); System.out.println("路径:"+cookie.getPath()); System.out.println("失效时间:"+cookie.getMaxAge()+"秒"); System.out.println("注释:"+cookie.getComment()); System.out.println("版本:"+cookie.getVersion()+"。安全:"+cookie.getSecure()+"。域名:"+cookie.getDomain()); System.out.println("---------------------------------------------------------------------------------------"); } return SUCCESS; } public String execute() throws Exception{ return SUCCESS; } }
现在我把添加cookie的代码和显示cookie的代码分开,这样逻辑更加清楚。
会了怎么添加cookie,下面当然是怎么读取,修改,删除cookie。
增删改查都会了此算是“会操作”
操作步骤:
先把cookie临时目录下的东西清空(路径到这里查看:浏览器中的InterNet选项中,浏览历史记录--设置--当前位置)
然后发一个请求添加一个cookie,到这个目录下看看(记得要右键刷新才能显示出来),
这时有了cookie我文件chinese12。
然后发请求读取所有cookie,从打印结果看,我只取到了回话cookie,即jsessionId。
我添加的cookie没有读取出来。
查了一下原因,是因为路径的原因,就是ck.setPath("/chinese12");
这样生成的文件名就是chinese12,但是读取的时候request.getCookies();
这行代码是默认路径,在读取时怎么读取指定的路径呢?网上我也没查到。
所以只好把添加的cookie路径改成默认的。即ck.setPath("/");
生成的cookie文件名是:cookie:lushuaiyin@helpdesk.citics.com/
可见这种默认的明明方式是: cookie:系统用户名@工程域名
cookie-name-lsy
%E6%97%B6%E9%97%B4%EF%BC%9A2012-11-27+11%3A28%3A05
helpdesk.citicsinfo.com/
1536
2552166528
30264407
912453727
30264399
*
后台打印:
服务端设置cookie:javax.servlet.http.Cookie@9f1ca0
request.getContextPath:
cookie----名字:JSESSIONID
值:CD62C08FC2C9312F51E724C77CDD9850
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
cookie----名字:cookie-name-lsy
值:%E6%97%B6%E9%97%B4%EF%BC%9A2012-11-27+11%3A28%3A05
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
修改读取时要对中文解码:
Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组
for(Cookie cookie : cookies){
String zhname=cookie.getName()!=null?java.net.URLDecoder.decode(cookie.getName(), "utf-8"):cookie.getName();
System.out.println("cookie----名字:"+zhname );
String zhvalue=cookie.getValue()!=null?java.net.URLDecoder.decode(cookie.getValue(), "utf-8"):cookie.getValue();
System.out.println("值:"+zhvalue);
String zhpath=cookie.getPath()!=null?java.net.URLDecoder.decode(cookie.getPath(), "utf-8"):cookie.getPath();
System.out.println("路径:"+zhpath);
System.out.println("失效时间:"+cookie.getMaxAge()+"秒");
String zhcomment=cookie.getComment()!=null?java.net.URLDecoder.decode(cookie.getComment(), "utf-8"):cookie.getComment();
System.out.println("注释:"+zhcomment);
System.out.println("版本:"+cookie.getVersion()+"。安全:"+cookie.getSecure()+"。域名:"+cookie.getDomain());
System.out.println("---------------------------------------------------------------------------------------");
}
打印:
request.getContextPath:
cookie----名字:JSESSIONID
值:CD62C08FC2C9312F51E724C77CDD9850
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
cookie----名字:cookie-name-lsy
值:时间:2012-11-27 11:52:09
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
从打印页可以看出中文已经能正常显示了,
JSESSIONID的失效时间是-1,就是在浏览器关闭的时候会清除这个sessionId.
奇怪的是我的cookie的路径,注释,域名都是null,这个很费解啊。
网上搜了半天,好像就我碰到了,别人就没遇见过这问题吗?
暂时放一边吧,有键值对就能实现功能了。
三,删除cookie
增加一个方法;
public String delcookie() throws Exception{ ActionContext ctx = ActionContext.getContext(); HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); Cookie[] cookies = null;//这样便可以获取一个cookie数组 if(request.getCookies()!=null){ cookies=request.getCookies(); for(Cookie cookie : cookies){ String zhname=cookie.getName()!=null?java.net.URLDecoder.decode(cookie.getName(), "utf-8"):cookie.getName(); System.out.println("cookie----名字:"+zhname ); String zhvalue=cookie.getValue()!=null?java.net.URLDecoder.decode(cookie.getValue(), "utf-8"):cookie.getValue(); System.out.println("值:"+zhvalue); String zhpath=cookie.getPath()!=null?java.net.URLDecoder.decode(cookie.getPath(), "utf-8"):cookie.getPath(); System.out.println("路径:"+zhpath); System.out.println("失效时间:"+cookie.getMaxAge()+"秒"); String zhcomment=cookie.getComment()!=null?java.net.URLDecoder.decode(cookie.getComment(), "utf-8"):cookie.getComment(); System.out.println("注释:"+zhcomment); System.out.println("版本:"+cookie.getVersion()+"。安全:"+cookie.getSecure()+"。域名:"+cookie.getDomain()); //删除 if(zhname.trim().equals("cookie-name-lsy")){ //从上面打印的数据看,路径是null,注释,域也是null。 //而卧添加cookie的时候确实是有注释内容的,在删除时也遇到了问题, //就是如果路径是null据删除不了,这个已经做过测试了。 //删除时必须重新设置path,这样才能正常删除! cookie.setPath("/");//必须设置路径!如果是其他路径,也要相应的设置。 cookie.setMaxAge(0);//删除时设置为0 System.out.println("----cookie-name-lsy已删除--------------"); response.addCookie(cookie); } System.out.println("---------------------------------------------------------------------------------------"); } } return SUCCESS; }
打印:
cookie----名字:cookie-name-lsy
值:时间:2012-11-27 14:46:44
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
----cookie-name-lsy已删除--------------
---------------------------------------------------------------------------------------
//从上面打印的数据看,路径是null,注释,域也是null。
//而我添加cookie的时候确实是有注释内容的,在删除时也遇到了问题,
//就是如果路径是null据删除不了,这个已经做过测试了。
//删除时必须重新设置path,这样才能正常删除!
cookie.setPath("/");//必须设置路径!如果是其他路径,也要相应的设置。
cookie.setMaxAge(0);//删除时设置为0
四,修改cookie
增加方法
public String editcookie() throws Exception{
ActionContext ctx = ActionContext.getContext();
HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE);
HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
Cookie[] cookies = null;//这样便可以获取一个cookie数组
if(request.getCookies()!=null){
cookies=request.getCookies();
for(Cookie cookie : cookies){
String zhname=cookie.getName()!=null?java.net.URLDecoder.decode(cookie.getName(), "utf-8"):cookie.getName();
System.out.println("cookie----名字:"+zhname );
String zhvalue=cookie.getValue()!=null?java.net.URLDecoder.decode(cookie.getValue(), "utf-8"):cookie.getValue();
System.out.println("值:"+zhvalue);
String zhpath=cookie.getPath()!=null?java.net.URLDecoder.decode(cookie.getPath(), "utf-8"):cookie.getPath();
System.out.println("路径:"+zhpath);
System.out.println("失效时间:"+cookie.getMaxAge()+"秒");
String zhcomment=cookie.getComment()!=null?java.net.URLDecoder.decode(cookie.getComment(), "utf-8"):cookie.getComment();
System.out.println("注释:"+zhcomment);
System.out.println("版本:"+cookie.getVersion()+"。安全:"+cookie.getSecure()+"。域名:"+cookie.getDomain());
//删除
if(zhname.trim().equals("cookie-name-lsy")){
//从上面打印的数据看,路径是null,注释,域也是null。
//而我添加cookie的时候确实是有注释内容的
//修改和删除也一样,必须设置路径path,不然浏览器找不到这个cookie
cookie.setPath("/");//必须设置路径!如果是其他路径,也要相应的设置。
cookie.setValue("editvalue");
System.out.println("----cookie-name-lsy已经成功修改--------------");
response.addCookie(cookie);
}
System.out.println("---------------------------------------------------------------------------------------");
}
}
return SUCCESS;
}
操作步骤;
先清空浏览器临时文件(也是cookie的目录);
添加一个cookie,查询遍历打印出所有cookie的信息,在目录下右键刷新,看cookie是否存在;
发送修改cookie的请求,然后再查询遍历所有cookie信息。
这时发现cookie的内容已经改变了。
把上面几个方法也优化一下,整个action的完整代码如下:
package org.hd.report.action; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import org.rd.framework.struts.action.CommonAction; import com.opensymphony.xwork2.ActionContext; // public class CookieAction extends CommonAction{ public String addcookie() throws Exception{ ActionContext ctx = ActionContext.getContext(); HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); /////////////////////////////////////////// Date dd=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String zhvalue1= java.net.URLEncoder.encode("时间:"+sdf.format(dd),"utf-8"); Cookie ck = new Cookie("cookie-name-lsy",zhvalue1); String zhvalue2 = java.net.URLEncoder.encode("thisisthecommentfromlsyxxxxx","utf-8"); ck.setComment(zhvalue2); // ck.setDomain("helpdesk.citicsinfo.com");//helpdesk.citicsinfo.com ck.setMaxAge(3600); // ck.setPath("/chinese12"); ck.setPath("/");//设置这个默认路径,在读取时才能正常读取 // ck.setVersion(1); System.out.println("服务端设置cookie:"+ck.toString()); response.addCookie(ck); return SUCCESS; } public String showcookie() throws Exception{ ActionContext ctx = ActionContext.getContext(); HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); System.out.println("request.getContextPath:"+request.getContextPath()); Cookie[] cookies = null;//这样便可以获取一个cookie数组 if(request.getCookies()!=null){ cookies=request.getCookies(); System.out.println("-----------------遍历cookie start------------------------------------" ); for(Cookie cookie : cookies){ String zhname=cookie.getName()!=null?java.net.URLDecoder.decode(cookie.getName(), "utf-8"):cookie.getName(); System.out.println("cookie----名字:"+zhname ); String zhvalue=cookie.getValue()!=null?java.net.URLDecoder.decode(cookie.getValue(), "utf-8"):cookie.getValue(); System.out.println("值:"+zhvalue); String zhpath=cookie.getPath()!=null?java.net.URLDecoder.decode(cookie.getPath(), "utf-8"):cookie.getPath(); System.out.println("路径:"+zhpath); System.out.println("失效时间:"+cookie.getMaxAge()+"秒"); String zhcomment=cookie.getComment()!=null?java.net.URLDecoder.decode(cookie.getComment(), "utf-8"):cookie.getComment(); System.out.println("注释:"+zhcomment); System.out.println("版本:"+cookie.getVersion()+"。安全:"+cookie.getSecure()+"。域名:"+cookie.getDomain()); System.out.println("---------------------------------------------------------------------------------------"); } System.out.println("-----------------遍历cookie end------------------------------------" ); } return SUCCESS; } public String delcookie() throws Exception{ ActionContext ctx = ActionContext.getContext(); HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); Cookie[] cookies = null;//这样便可以获取一个cookie数组 if(request.getCookies()!=null){ cookies=request.getCookies(); for(Cookie cookie : cookies){ String zhname=cookie.getName()!=null?java.net.URLDecoder.decode(cookie.getName(), "utf-8"):cookie.getName(); String zhvalue=cookie.getValue()!=null?java.net.URLDecoder.decode(cookie.getValue(), "utf-8"):cookie.getValue(); String zhpath=cookie.getPath()!=null?java.net.URLDecoder.decode(cookie.getPath(), "utf-8"):cookie.getPath(); String zhcomment=cookie.getComment()!=null?java.net.URLDecoder.decode(cookie.getComment(), "utf-8"):cookie.getComment(); //删除 if(zhname.trim().equals("cookie-name-lsy")){ //从上面打印的数据看,路径是null,注释,域也是null。 //而卧添加cookie的时候确实是有注释内容的,在删除时也遇到了问题, //就是如果路径是null据删除不了,这个已经做过测试了。 //删除时必须重新设置path,这样才能正常删除! cookie.setPath("/");//必须设置路径!如果是其他路径,也要相应的设置。 cookie.setMaxAge(0);//删除时设置为0 System.out.println("----cookie-name-lsy已删除,原始信息如下:--------------"); System.out.println("cookie----名字:"+zhname ); System.out.println("值:"+zhvalue); System.out.println("路径:"+zhpath); System.out.println("失效时间:"+cookie.getMaxAge()+"秒"); System.out.println("注释:"+zhcomment); System.out.println("版本:"+cookie.getVersion()+"。安全:"+cookie.getSecure()+"。域名:"+cookie.getDomain()); response.addCookie(cookie); } System.out.println("---------------------------------------------------------------------------------------"); } } return SUCCESS; } public String editcookie() throws Exception{ ActionContext ctx = ActionContext.getContext(); HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); Cookie[] cookies = null;//这样便可以获取一个cookie数组 if(request.getCookies()!=null){ cookies=request.getCookies(); for(Cookie cookie : cookies){ String zhname=cookie.getName()!=null?java.net.URLDecoder.decode(cookie.getName(), "utf-8"):cookie.getName(); String zhvalue=cookie.getValue()!=null?java.net.URLDecoder.decode(cookie.getValue(), "utf-8"):cookie.getValue(); //删除 if(zhname.trim().equals("cookie-name-lsy")){ //从上面打印的数据看,路径是null,注释,域也是null。 //而我添加cookie的时候确实是有注释内容的 //修改和删除也一样,必须设置路径path,不然浏览器找不到这个cookie cookie.setPath("/");//必须设置路径!如果是其他路径,也要相应的设置。 cookie.setValue("editvalue"); cookie.setMaxAge(3600); System.out.println("----cookie-name-lsy已经成功修改--------------"); response.addCookie(cookie); } System.out.println("---------------------------------------------------------------------------------------"); } } return SUCCESS; } public String execute() throws Exception{ return SUCCESS; } }
request.getContextPath:
-----------------遍历cookie start------------------------------------
cookie----名字:JSESSIONID
值:47BD54C0CD6284F0DBFB0EC2333722EC
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
cookie----名字:cookie-name-lsy
值:时间:2012-11-27 15:32:45
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
-----------------遍历cookie end------------------------------------
---------------------------------------------------------------------------------------
----cookie-name-lsy已经成功修改--------------
---------------------------------------------------------------------------------------
request.getContextPath:
-----------------遍历cookie start------------------------------------
cookie----名字:JSESSIONID
值:47BD54C0CD6284F0DBFB0EC2333722EC
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
cookie----名字:cookie-name-lsy
值:editvalue
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
-----------------遍历cookie end------------------------------------
到目前为止,对cookie的增删改查都已经实现,算的上“会操作”了。
相关推荐
人工智能-深度学习-tensorflow
人工智能毕业设计&课程设计
基于ssm的中小型企业财务管理录系统.zip
这个资源是一个基于Spring Boot和MySQL的洗衣店订单管理系统的完整源码。它包括了所有的源代码文件,以及一个详细的文档,可以帮助你理解和运行这个系统。这个系统的主要功能包括:用户注册和登录,下单,查看订单,修改订单,删除订单等。用户可以在系统中选择洗衣服务,然后提交订单。系统会自动计算订单的总价,并将其显示在用户的订单列表中。用户还可以查看自己的历史订单,以及每个订单的详细信息。此外,系统还包括了一个管理员模块。管理员可以查看所有的订单,以及对订单进行管理。他们可以修改订单的状态,例如将订单标记为已完成,或者取消订单。这个系统使用了Spring Boot框架,这是一个非常流行的Java开发框架,它可以帮助你快速地开发和部署应用程序。同时,系统也使用了MySQL数据库,这是一个广泛使用的关系型数据库,它可以存储大量的数据,并提供高效的查询功能。总的来说,这个资源是一个非常完整的洗衣店订单管理系统的源码,它可以帮助你理解如何使用Spring Boot和MySQL来开发一个实际的应用程序。无论你是正在学习Java编程,还是已经有一定的开发经验,都可以从这个资源中学到很多有用的知识和技能。
W9825G6KH-6I SDRAM,256Mb(32MB,16Mbx16),3.3v 动态随机存取存储器
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
人工智能毕业设计&课程设计
asp代码ASP基于web的学校新闻发布系统开发(论文+源代码+开题报告+文献综述+外文翻译)本资源系百度网盘分享地址
三菱PLC例程源码PLC 气压程式本资源系百度网盘分享地址
三菱PLC例程源码PLC通过RS485 对FR系列变频的控制本资源系百度网盘分享地址
基于ssm的学生档案管理系统.zip
这是一个基于Java语言开发的elfinder 2.x版本Web文件管理器后端设计,包含63个文件,其中主要文件类型包括49个Java源文件、3个XML文件、2个PNG图片文件、2个Markdown文档、1个gitattributes文件、1个gitignore文件、1个LICENSE文件、1个Properties文件、1个types文件和1个未知类型的文件。该项目提供了丰富的文件管理功能,包括自定义文件视图和自定义文件操作,为用户提供了高效、便捷的文件管理体验。
使用DS Client在PPT中动态展示分子三维结构
基于ssm+vue的汽车站车辆运管系统.zip
算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
DS在生物药物领域的解决方案
三菱PLC例程源码SBR废水处理本资源系百度网盘分享地址
人工智能毕业设计&课程设计
人工智能-深度学习-tensorflow
基于ssm电子病历系统.zip