Servlet学习D4 – Servlet中的常见对象Cookie
1. ServletContext
2. ServletConfig
3. Cookie&session
三、 Cookie对象
Http协议特点:1,单向性。2无状态。
Cookie:是一个依赖于客户端维持回话状态的对象。
Cookie特点:
1.如果我们的程序需要给客户端浏览器返回一个cookie那么这个对象是需要我们自己来创建的。
2.cookie对象的结构为key与value结构。Cookie对象的类型又分为两种1,状态cookie。2,持久化cookie。
3.如果我们需要使用cookie对象向客户端浏览器传递数据,那么数据本身不能是中文。
4.当客户端浏览器请求servlet时,客户端浏览器会将这个服务器曾经写回给他的所有的cookie对象在请求中传递过来。
1、Cookie的类型:
1)状态cookie:状态cookie的特点是浏览器会将该对象保存在运行浏览器的进程中。他的生命周期是谁这浏览器的存在而存在,随着浏览器的消亡而消亡
2)持久化cookie:持久化cookie的特点是浏览器会将这个cookie对象持久化到磁盘中。当cookie设置时间到达时,浏览器就不会在请求中传递这个cookie了。对于保存cookie的文件 我们不需要管理。浏览器自己回来管理这些文件。
如果创建一个持久化cookie呢?其实就是调用cookie对象下的一个api
Cookie c = new Cookie("first", "frist");//状态Cookie
c.setMaxAge(120);//单位为秒
2、cookie传值中含有中文的解决方式
1)可以使用加密算法来解决,但是需要注意的是在选择加密算法时一定要选择具有可逆能力的加密算法。
String value = EncUtil.encrypt("我是中国人");
//使用自己写的ENCUtil工具类完成加密
String str = EncUtil.decrypt(c.getValue());
//使用自己写的ENCUtil工具类完成解密
2)可以使用jdk中的URLEncoder与URLDecoder来完成中文的处理。
String str = URLEncoder.encode("我是中国人", "utf-8");//编码
String str = URLDecoder.decode(c.getValue(), "utf-8");//解码
3)服务端返回给客户端浏览器时的cookie数量
浏览器能够接受服务端所返回的cookie的数量是有限的,具体多少个和浏览器的品牌有关系。
response中添加cookie时IllegalArgumentException错误
很多人在学习cookie时,经常发生这个错误,今天有人问我这个问题,所以我为大家把这个问题解决方法为 大家分享一下(网上没有具体的解决方案)。
错误代码:
Cookie cookie=new Cookie("name","value value2");
response.addCookie(cookie);
错误提示
java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
错误代码:
Cookie cookie=new Cookie("name","value ,value2");
response.addCookie(cookie);
错误提示:
java.lang.IllegalArgumentException: An invalid character [44] was present in the Cookie value
由异常可以看出这个问题属于无效参数问题,在看后面的提示内容
An invalid character [44] was present in the Cookie value
cookie中存在无效的字符character [44],所以我们查询ASCII码表可知44表示“,”32表示空格
所以我们只需要将value中的对应字符替换掉即可,或进行编码
此外,cookie的第二個參數,最好不要存在中文
原文:https://blog.csdn.net/whb3299065/article/details/54730976