一、Cookie介绍
- 请求头中携带的信息。
- 将数据保存在客户端。
- Cookie的分类:
(1)默认级别:在Cookie没有设置有效时间的情况下,Cookie在关闭浏览器时销毁,该级别Cookie存放在内存中。
(2)持久级别:Cookie设置了有效时间,Cookie被持久化到磁盘中。重启浏览器时,会从磁盘加载到内存。当超过有效时间时,Cookie会被销毁。 - 常用API:
(1)getName():获取Cookie的名称。
(2)getValue():获取Cookie的值。
(3)setDomain():设置Cookie的有效域名。
(4)setPath():设置Cookie的有效路径,该路径及子路径均能携带该Cookie。从项目的上下文路径开始。
(5)setMaxAge():设置Cookie的有效时长。 - 项目测试
(1)编写MyServlet和HisServlet且都继承HttpServlet类,第一个类创建指定路径且是持久级别的Cookie,第二个类用非指定路径来访问Cookie。
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie[] cookies = req.getCookies();
String cookieVal = null;
for (Cookie cookie : cookies) {
if ("lastTime".equals(cookie.getName())){
cookieVal = cookie.getValue();
}
}
String msg = "";
String time = new SimpleDateFormat("yyyy-mm-dd-hh:mm:ss").format(new Date());
if (cookieVal != null){
msg = "上一次访问时间:" + cookieVal;
}else {
msg = "第一次访问";
}
Cookie cookie = new Cookie("lastTime", time);
cookie.setMaxAge(60*60*24);
cookie.setPath("/test01/test01");
resp.addCookie(cookie);
//设置响应头,解决客户端乱码
resp.setContentType("text/html;charset=UTF-8");
PrintWriter writer = resp.getWriter();
writer.print(msg);
}
}
public class HisServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie[] cookies = req.getCookies();
String cookieVal = null;
for (Cookie cookie : cookies) {
if ("lastTime".equals(cookie.getName())){
cookieVal = cookie.getValue();
}
}
String msg = "";
if (cookieVal != null){
msg = "获取到Cookie值:" + cookieVal;
}else {
msg = "无";
}
//设置响应头,解决客户端乱码
resp.setContentType("text/html;charset=UTF-8");
PrintWriter writer = resp.getWriter();
writer.print(msg);
}
}
(2)编写web.xml文件,配置Servlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.wsh.servlet.MyServlet</servlet-class>
<!--load-on-startup的值大于等于0时,Servlet在Tomcat启动时初始化-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/test01</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>HisServlet</servlet-name>
<servlet-class>com.wsh.servlet.HisServlet</servlet-class>
<!--load-on-startup的值大于等于0时,Servlet在Tomcat启动时初始化-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HisServlet</servlet-name>
<url-pattern>/test02</url-pattern>
</servlet-mapping>
</web-app>
(3)配置Tomcat中的项目上下文路径
(4)运行
先访问/test01/test01,然后关闭浏览器再次访问,测试Cookie能否返回客户端并持久化到磁盘上。
访问/test01/test02,测试setPath()方法是否有效。
注:删除持久化在磁盘中的Cookie,确定要删除Cookie的路径,设置其有效时间为0。