首页 / JAVA / Java——cookie细节
Java——cookie细节
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java——cookie细节,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7256字,纯文字阅读大概需要11分钟。
内容图文
![Java——cookie细节](/upload/InfoBanner/zyjiaocheng/825/42263781444744a8b59c0f50a14a08f7.jpg)
在创建cookie时,需要了解几点关于cookie的小知识,今天就介绍四点关于cookie的细节
我们先创建一个Servlet类型的CookieDemo2,用来统一接收cookie
package cookie;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/CookieDemo2")
public class CookieDemo2 extends HttpServlet {
private static final long serialVersionUID = 1L;
/*
实现原理:
* 基于响应头set-cookie和请求头cookie实现
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//3、获取cookie
Cookie[] cookies=request.getCookies();
//获取数据遍历cookie
if(cookies!=null) {
for(Cookie coookie:cookies) {
String name=coookie.getName();
String value=coookie.getValue();
System.out.println(name+":"+value);
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
1、一次可不可以发送多个cookie?
- 可以
- 可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。
创建servlet类型CookieDemo11,运行tomcat,
网址先输入 http://localhost:8888/studyWeb/CookieDemo11
在输入 http://localhost:8888/studyWeb/CookieDemo2
即可在开发者模式或服务器看到创建了多个cookie
package cookie;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/CookieDemo11")
public class CookieDemo11 extends HttpServlet {
private static final long serialVersionUID = 1L;
/*
一次可不可以发送多个cookie?
* 可以
* 可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1、创建cookie对象
Cookie c1=new Cookie("msg","hello");
Cookie c2=new Cookie("url","www.baidu.com");
//2、发送cookie
response.addCookie(c1);
response.addCookie(c2);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
- 2、cookie在浏览器中保存多长时间?
- 默认情况下,当浏览器关闭后,Cookie数据被销毁
- 持久化存储:
setMaxAge(int seconds)- 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效
- 负数:默认值
- 零:删除cookie信息
创建servlet类型CookieDemo12,运行tomcat,
网址先输入 http://localhost:8888/studyWeb/CookieDemo12
在输入 http://localhost:8888/studyWeb/CookieDemo2
自己多次尝试即可掌握
package cookie;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/CookieDemo12")
public class CookieDemo12 extends HttpServlet {
private static final long serialVersionUID = 1L;
/*
cookie在浏览器中保存多长时间?
1. 默认情况下,当浏览器关闭后,Cookie数据被销毁
2. 持久化存储:
* setMaxAge(int seconds)
1. 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效
2. 负数:默认值
3. 零:删除cookie信息
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1、创建cookie对象
Cookie c=new Cookie("msg","hello");
//设置cookie的存活时间
//c.setMaxAge(60); //将cookie持久化到磁盘,60秒后自动删除cookie文件
//c.setMaxAge(0); //删除cookie信息
c.setMaxAge(-1); //默认情况
//2、发送cookie
response.addCookie(c);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
-
cookie能不能存中文?
1、 在tomcat 8 之前 cookie中不能直接存储中文数据- 需要将中文数据转码—一般采用URL编码,利用自带的URL编码
2、 在tomcat 8 之后,cookie支持中文数据。特殊字符还是不支持,建议使用URL编码存储,URL解码解析
- 但是在火狐浏览器F12开发者模式,cookie中文是乱码,而谷歌浏览器显示的出中文
创建servlet类型CookieDemo13,运行tomcat,
网址先输入 http://localhost:8888/studyWeb/CookieDemo13
在输入 http://localhost:8888/studyWeb/CookieDemo2
package cookie;
import java.io.IOException;
//import java.net.URLDecoder;
//import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/CookieDemo13")
public class CookieDemo13 extends HttpServlet {
private static final long serialVersionUID = 1L;
/*
cookie能不能存中文?
* 在tomcat 8 之前 cookie中不能直接存储中文数据。
* 需要将中文数据转码,一般使用URL编码和解码
* 在tomcat 8 之后,cookie支持中文数据。特殊字符还是不支持,建议使用URL编码存储,URL解码解析
但是在火狐浏览器F12开发者模式,cookie中文是乱码,而谷歌浏览器显示的出中文
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1、创建cookie对象
Cookie c=new Cookie("msg","你好");
// String value=c.getValue();
// System.out.println("编码前:"+value);
// value=URLEncoder.encode(value, "utf-8");
// System.out.println("编码后:"+value);
// value=URLDecoder.decode(value, "utf-8");
// System.out.println("解码后:"+value);
//2、发送cookie
response.addCookie(c);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
4.、cookie共享问题?
1. 假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?
- 1.1、默认情况下cookie不能共享
- 1.2、setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录
- 1.3、如果要共享,则可以将path设置为"/"
- 不同的tomcat服务器间cookie共享问题?
- 2.1、.setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享
- 2.2、setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享
创建servlet类型CookieDemo14,运行tomcat,两个CookieDemo2一样,不在同一个项目
网址先输入 http://localhost:8888/studyWeb/CookieDemo14
在输入 http://localhost:8888/studyWeb/CookieDemo2
在输入 http://localhost:8888/studyWeb2/CookieDemo2
package cookie;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/CookieDemo14")
public class CookieDemo14 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1、创建cookie对象
Cookie c=new Cookie("msg","hello");
c.setPath("/");
//2、发送cookie
response.addCookie(c);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
可以发现运行CookieDemo14后,两个项目都能获取到这个cookie。
内容总结
以上是互联网集市为您收集整理的Java——cookie细节全部内容,希望文章能够帮你解决Java——cookie细节所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。