目录
1、会话机制
2、Cookie机制
2.1 什么是Cookie
2.2 如何创建Cookie与使用Cookie
2.2.1 创建Cookie与使用Cookie的代码演示-项目结构图-API全集
2.2.2 编写一个Servlet处理器-处理GET请求
2.2.2 在web.xml文件中配置动态资源Servlet处理器的访问路径
2.2.3 编写一个前端交互页面
2.2.4 测试-前端发起请求:创建Cookie
2.2.5 测试-后端处理请求:创建Cookie并返回Cookie
2.3 如何获取Cookie
2.3.1 编写一个Servlet处理器与获取指定Cookie对象的工具类
2.3.2 在web.xml文件中配置Servlet处理器的访问路径
2.3.3 编写前端页面
2.3.4 前端发起请求,服务器端看测试结果
2.4 Cookie值的修改
2.4.1 方案一:修改cookie的Servlet处理器:updateCookie方法
2.4.2 方案二:修改cookie的Servlet处理器:updateCookie方法
2.5 Cookie的生命控制
2.5.1 Servlet处理器-生命控制的方法
2.5.2 前端页面-HTML
2.6 Cookie的有效路径Path的设置
2.6.1 setPath()方法的代码演示
2.7 Cookies练习-面用户名登陆演示-项目结构
2.7.1 编写一个登陆的Servlet处理器
2.7.2 在web.xml文件中配置Servlet处理器的访问路径
2.7.3 编写一个前端登陆页面jsp
2.7.4 测试
3 谷歌浏览器如何查看Cookie:MAC中:fn+f12
1、会话机制
(1)会话:一次会话中包含多次请求和多次响应。注:一次会话,表示浏览器第一次给服务器发送请求,会话建立,直到有一方断开为止,才表示此次会话结束。
(2)功能:在一次会话的多次请求之间是共享数据的。
(3)方式:A:客户端会话技术:Cookie。B:服务器端会话技术:Session。
2、Cookie机制
2.1 什么是Cookie
(1)cookie翻译过来是饼干的意思。
(2)cookie是服务器端通知客户端保存键值对的一种会话技术。
(3)客户端有了cookie之后,每次请求都可以把该cookie发送给服务器,在服务器中可以解析该Cookie内容。
(4)每个cookie的大小不能超过4KB。
2.2 如何创建Cookie与使用Cookie
创建与使用步骤:
(1)在服务器端创建Cookie对象,对象中设置准备绑定的数据,数据的形式是键值对 :new Cookie(String name, String value);
(2)客户端向服务器端发送HTTP请求后,服务器通过把Cookie对象设置在响应对象HttpServletResponse对象中回传给向客户端:response.addCookie(Cookie cookie);
(3)客户端接收到Cookie对象后,便可以使用了。当它再次发送请求的时候,会携带这个Cookie,服务器也会继续获取从客户端发来的Cookie对象:Cookie[ ] request.getCookies( );
(4)服务器得到Cookie对象之后,使用getName( )与getValue( )方法得到Cookie对象中的数据,从而继续进行业务操作。
2.2.1 创建Cookie与使用Cookie的代码演示-项目结构图-API全集
2.2.2 编写一个Servlet处理器-处理GET请求
package com.wind.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
/**
//测试1:创建cookie对象
*/
public class CookieServlet extends HttpServlet {
private static final long serialVersionUID = 6898486426877817687L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决POST请求中的中文乱码问题,一定要在获取请求参数之前调用才有效
request.setCharacterEncoding("UTF-8");
//解决响应中的中文乱码问题
response.setContentType("text/html; charset=UTF-8");
String action = request.getParameter("action");
try {
//反射方式:获取action业务鉴别字符串,获取相应的业务方法
Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
method.invoke(new CookieServlet(), request, response);
System.out.println(method);
} catch (Exception e) {
System.out.println("CookieServlet error..." + e);
}
}
//测试1:创建cookie对象
private void createCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//1.创建Cookie对象,并且向对象中设置值
Cookie cookie1 = new Cookie("key1", "value1");
Cookie cookie2 = new Cookie("key2", "value2");
//2.向响应中写入Cookie,通知客户端保存Cookie对象
response.addCookie(cookie1);
response.addCookie(cookie2);
response.getWriter().write("cookie创建成功");
}
}
2.2.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>CookieServlet</servlet-name>
<servlet-class>com.wind.servlet.CookieServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CookieServlet</servlet-name>
<url-pattern>/cookieServlet</url-pattern>
</servlet-mapping>
</web-app>
2.2.3 编写一个前端交互页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>Cookie</title>
<base href="http://localhost:8080/13_cookie_session/">
<style type="text/css">
ul li {
list-style: none;
}
</style>
</head>
<body>
<iframe name="target" width="500" height="200" style="..."></iframe>
<div style="...">
<ul>
<li><a href="cookieServlet?action=createCookie" target="target">Cookie的创建</a></li>
<li><a href="cookieServlet?action=getCookie" target="target">Cookie的获取</a></li>
<li><a href="" target="target">Cookie的修改</a></li>
<li>Cookie的生存周期</li>
<li>
<ul>
<li><a href="" target="target">Cookie的默认存活时间</a></li>
<li><a href="" target="target">Cookie立即删除</a></li>
<li><a href="" target="target">Cookie存活3600秒</a></li>
</ul>
</li>
<li><a href="" target="target">Cookie的路径设置</a></li>
<li><a href="" target="target">Cookie的用户免登陆练习</a></li>
</ul>
</div>
</body>
</html>
2.2.4 测试-前端发起请求:创建Cookie
(1)前端发起一个【cookie的创建】HTTP请求之后,服务器端通过反射调用创建cookie对象的方法,创建cookie对象,并且向对象中设置了两个值“key1=value1、key2=value2”,然后在响应中写入这个cookie对象,通知客户端保存cookie对象。
(2)随后,在Chrome浏览器中便可以看到服务器端设置的cookie数据。
(3)一个是直接在请求接口中看到cookie数据。另一个是在Application中看到cookie数据。
2.2.5 测试-后端处理请求:创建Cookie并返回Cookie
2.3 如何获取Cookie
2.3.1 编写一个Servlet处理器与获取指定Cookie对象的工具类
(1)Servlet处理器:request.getCookies( );
package com.wind.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
/**
//测试2:获取所有的cookie对象,与指定的cookie对象
*/
public class CookieServlet extends HttpServlet {
private static final long serialVersionUID = 6898486426877817687L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决POST请求中的中文乱码问题,一定要在获取请求参数之前调用才有效
request.setCharacterEncoding("UTF-8");
//解决响应中的中文乱码问题
response.setContentType("text/html; charset=UTF-8");
String action = request.getParameter("action");
try {
//反射方式:获取action业务鉴别字符串,获取相应的业务方法
Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
method.invoke(new CookieServlet(), request, response);
System.out.println(method);
} catch (Exception e) {
System.out.println("CookieServlet error..." + e);
}
}
//测试1:创建cookie对象
private void createCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//1.创建Cookie对象,并且向对象中设置值
Cookie cookie1 = new Cookie("key1", "value1");
Cookie cookie2 = new Cookie("key2", "value2");
//2.向响应中写入Cookie,通知客户端保存Cookie对象
response.addCookie(cookie1);
response.addCookie(cookie2);
response.getWriter().write("cookie创建成功");
}
//测试2:获取所有的cookie对象,与指定的cookie对象
private void getCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//3.服务器端获取从客户端发送过来的cookie数据
Cookie[] cookies = request.getCookies();
//4.服务器端获取Cookie对象的值
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
if (cookie != null) {
response.getWriter().write("Cookie[" + cookie.getName() + "=" + cookie.getValue() + "]<br/>");
}
}
}
//5.如果只想要某一个cookie,则需要这样做
Cookie iWantCookie = CookieUtils.findCookie("key1", cookies);
response.getWriter().write("找到了我想要的Cookie[" + iWantCookie.getName() + "=" + iWantCookie.getValue() + "]");
}
}
(2)获取指定Cookie对象的工具类:
package com.wind.servlet;
import javax.servlet.http.Cookie;
public class CookieUtils {
public static Cookie findCookie(String name, Cookie[] cookies) {
Cookie iWantCookie = null;
if (name != null && cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
if (name.equals(cookie.getName())) {
iWantCookie = cookie;
break;
}
}
}
return iWantCookie;
}
}
2.3.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>CookieServlet</servlet-name>
<servlet-class>com.wind.servlet.CookieServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CookieServlet</servlet-name>
<url-pattern>/cookieServlet</url-pattern>
</servlet-mapping>
</web-app>
2.3.3 编写前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>Cookie</title>
<base href="http://localhost:8080/13_cookie_session/">
<style type="text/css">
ul li {
list-style: none;
}
</style>
</head>
<body>
<iframe name="target" width="500" height="200" style="..."></iframe>
<div style="...">
<ul>
<li><a href="cookieServlet?action=createCookie" target="target">Cookie的创建</a></li>
<li><a href="cookieServlet?action=getCookie" target="target">Cookie的获取</a></li>
<li><a href="" target="target">Cookie的修改</a></li>
<li>Cookie的生存周期</li>
<li>
<ul>
<li><a href="" target="target">Cookie的默认存活时间</a></li>
<li><a href="" target="target">Cookie立即删除</a></li>
<li><a href="" target="target">Cookie存活3600秒</a></li>
</ul>
</li>
<li><a href="" target="target">Cookie的路径设置</a></li>
<li><a href="" target="target">Cookie的用户免登陆练习</a></li>
</ul>
</div>
</body>
</html>
2.3.4 前端发起请求,服务器端看测试结果
(1)首先,点击【Cookie的创建】,在服务器端创建cookie对象,并设置cookie值,然后吐给客户端保存。
(2)然后,点击【Cookie的获取】,客户端再次访问服务器,此时,客户端会携带着刚才创建好的cookie对象送到服务器端,服务器端可以直接查看。
(3)服务器查看到的结果是:
2.4 Cookie值的修改
方案一:
(1)先创建一个需要修改的同名的cookie对象。
(2)使用cookie的构造器给这个需要修改的cookie的key赋予一个新的value值。
(3)调用response.addCookie( cookie ); 通知客户端保存修改。
2.4.1 方案一:修改cookie的Servlet处理器:updateCookie方法
package com.wind.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
/**
//测试3.cookie的修改
*/
public class CookieServlet extends HttpServlet {
private static final long serialVersionUID = 6898486426877817687L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决POST请求中的中文乱码问题,一定要在获取请求参数之前调用才有效
request.setCharacterEncoding("UTF-8");
//解决响应中的中文乱码问题
response.setContentType("text/html; charset=UTF-8");
String action = request.getParameter("action");
try {
//反射方式:获取action业务鉴别字符串,获取相应的业务方法
Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
method.invoke(new CookieServlet(), request, response);
System.out.println(method);
} catch (Exception e) {
System.out.println("CookieServlet error..." + e);
}
}
//测试1:创建cookie对象
private void createCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//1.创建Cookie对象,并且向对象中设置值
Cookie cookie1 = new Cookie("key1", "value1");
Cookie cookie2 = new Cookie("key2", "value2");
//2.向响应中写入Cookie,通知客户端保存Cookie对象
response.addCookie(cookie1);
response.addCookie(cookie2);
response.getWriter().write("cookie创建成功");
}
//测试2:获取cookie对象
private void getCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//3.服务器端获取从客户端发送过来的cookie数据
Cookie[] cookies = request.getCookies();
//4.服务器端获取Cookie对象的值
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
if (cookie != null) {
response.getWriter().write("Cookie[" + cookie.getName() + "=" + cookie.getValue() + "]<br/>");
}
}
}
//5.如果只想要某一个cookie,则需要这样做
Cookie iWantCookie = CookieUtils.findCookie("key1", cookies);
response.getWriter().write("找到了我想要的Cookie[" + iWantCookie.getName() + "=" + iWantCookie.getValue() + "]");
}
//测试3.cookie的修改
private void updateCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//1.先创建一个需要修改的同名的cookie
//2.然后通过cookie的构造器重新给需要修改的cookie的key赋予一个新的value值
Cookie cookie = new Cookie("key1", "newValue1");
//3.写会到响应中
response.addCookie(cookie);
response.getWriter().write("修改了我想要修改的Cookie[" + cookie.getName() + "=" + cookie.getValue() + "]");
}
}
2.4.2 方案二:修改cookie的Servlet处理器:updateCookie方法
方案一:
(1)先查找到需要修改的cookie对象。
(2)调用setValue()方法给这个key赋予新的值。
(3)调用response.addCookie( cookie ); 通知客户端保存修改。
package com.wind.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
/**
//测试3.cookie的修改
*/
public class CookieServlet extends HttpServlet {
private static final long serialVersionUID = 6898486426877817687L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决POST请求中的中文乱码问题,一定要在获取请求参数之前调用才有效
request.setCharacterEncoding("UTF-8");
//解决响应中的中文乱码问题
response.setContentType("text/html; charset=UTF-8");
String action = request.getParameter("action");
try {
//反射方式:获取action业务鉴别字符串,获取相应的业务方法
Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
method.invoke(new CookieServlet(), request, response);
System.out.println(method);
} catch (Exception e) {
System.out.println("CookieServlet error..." + e);
}
}
//测试1:创建cookie对象
private void createCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//1.创建Cookie对象,并且向对象中设置值
Cookie cookie1 = new Cookie("key1", "value1");
Cookie cookie2 = new Cookie("key2", "value2");
//2.向响应中写入Cookie,通知客户端保存Cookie对象
response.addCookie(cookie1);
response.addCookie(cookie2);
response.getWriter().write("cookie创建成功");
}
//测试2:获取cookie对象
private void getCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//3.服务器端获取从客户端发送过来的cookie数据
Cookie[] cookies = request.getCookies();
//4.服务器端获取Cookie对象的值
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
if (cookie != null) {
response.getWriter().write("Cookie[" + cookie.getName() + "=" + cookie.getValue() + "]<br/>");
}
}
}
//5.如果只想要某一个cookie,则需要这样做
Cookie iWantCookie = CookieUtils.findCookie("key1", cookies);
response.getWriter().write("找到了我想要的Cookie[" + iWantCookie.getName() + "=" + iWantCookie.getValue() + "]");
}
//测试3.cookie的修改
private void updateCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//方案一:
//1.先创建一个需要修改的同名的cookie
//2.然后通过cookie的构造器重新给需要修改的cookie的key赋予一个新的value值
Cookie cookie = new Cookie("key1", "newValue1");
//3.写回到响应中
response.addCookie(cookie);
response.getWriter().write("修改了我想要修改的Cookie1[" + cookie.getName() + "=" + cookie.getValue() + "]");
//方案二:
Cookie[] cookies = request.getCookies();
Cookie cookie2 = CookieUtils.findCookie("key2", cookies);
if (cookie2 != null) {
cookie2.setValue("newValue2");
response.addCookie(cookie2);
response.getWriter().write("修改了我想要修改的Cookie2[" + cookie2.getName() + "=" + cookie2.getValue() + "]");
}
}
}
2.5 Cookie的生命控制
cookie的生命控制,是指管理cookie何时销毁。
使用的是方法:setMaxAge( 参数 )
(1)参数=正数:表示在指定的秒数后过期。
(2)参数=0:表示浏览器一关闭,cookie即被删除(默认值是-1)。
(3)参数=负数:表示马上删除cookie。
2.5.1 Servlet处理器-生命控制的方法
package com.wind.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
/**
//测试4.测试cookie的默认过期时间
//测试5.测试马上删除cookie
//测试6.测试cookie的存活时间为60s
*/
public class CookieServlet extends HttpServlet {
private static final long serialVersionUID = 6898486426877817687L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决POST请求中的中文乱码问题,一定要在获取请求参数之前调用才有效
request.setCharacterEncoding("UTF-8");
//解决响应中的中文乱码问题
response.setContentType("text/html; charset=UTF-8");
String action = request.getParameter("action");
try {
//反射方式:获取action业务鉴别字符串,获取相应的业务方法
Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
method.invoke(new CookieServlet(), request, response);
System.out.println(method);
} catch (Exception e) {
System.out.println("CookieServlet error..." + e);
}
}
//测试1:创建cookie对象
private void createCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//1.创建Cookie对象,并且向对象中设置值
Cookie cookie1 = new Cookie("key1", "value1");
Cookie cookie2 = new Cookie("key2", "value2");
//2.向响应中写入Cookie,通知客户端保存Cookie对象
response.addCookie(cookie1);
response.addCookie(cookie2);
response.getWriter().write("cookie创建成功");
}
//测试2:获取cookie对象
private void getCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//3.服务器端获取从客户端发送过来的cookie数据
Cookie[] cookies = request.getCookies();
//4.服务器端获取Cookie对象的值
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
if (cookie != null) {
response.getWriter().write("Cookie[" + cookie.getName() + "=" + cookie.getValue() + "]<br/>");
}
}
}
//5.如果只想要某一个cookie,则需要这样做
Cookie iWantCookie = CookieUtils.findCookie("key1", cookies);
response.getWriter().write("找到了我想要的Cookie[" + iWantCookie.getName() + "=" + iWantCookie.getValue() + "]");
}
//测试3.cookie的修改
private void updateCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//方案一:
//1.先创建一个需要修改的同名的cookie
//2.然后通过cookie的构造器重新给需要修改的cookie的key赋予一个新的value值
Cookie cookie = new Cookie("key1", "newValue1");
//3.写回到响应中
response.addCookie(cookie);
response.getWriter().write("修改了我想要修改的Cookie1[" + cookie.getName() + "=" + cookie.getValue() + "]");
//方案二:
Cookie[] cookies = request.getCookies();
Cookie cookie2 = CookieUtils.findCookie("key2", cookies);
if (cookie2 != null) {
cookie2.setValue("newValue2");
response.addCookie(cookie2);
response.getWriter().write("修改了我想要修改的Cookie2[" + cookie2.getName() + "=" + cookie2.getValue() + "]");
}
}
//测试4.测试cookie的默认过期时间
private void defaultLife(HttpServletRequest request, HttpServletResponse response) throws IOException {
Cookie cookie = new Cookie("defaultLife", "defaultLife");
//默认是:浏览器一关闭,cookie即被删除了(需要等待浏览器关闭)
cookie.setMaxAge(-1);
response.addCookie(cookie);
}
//测试5.测试马上删除cookie
private void deleteNow(HttpServletRequest request, HttpServletResponse response) throws IOException {
Cookie[] cookies = request.getCookies();
//1.先找到你要删除的cookie
Cookie cookie1 = CookieUtils.findCookie("key1", cookies);
if (cookie1 != null) {
//2.调用setMaxAge方法设置过期时间
//设置0,表示cookie被马上删除,都不需要等待浏览器关闭
cookie1.setMaxAge(0);
//3.回传给客户端
response.addCookie(cookie1);
response.getWriter().write("key1的cookie1已经被删除了");
}
}
//测试6.测试cookie的存活时间为60s
private void life60(HttpServletRequest request, HttpServletResponse response) throws IOException {
Cookie[] cookies = request.getCookies();
Cookie cookie = new Cookie("life60", "life60");
//设置cookie的存活时间为60s
cookie.setMaxAge(60);
response.addCookie(cookie);
}
}
2.5.2 前端页面-HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>Cookie</title>
<base href="http://localhost:8080/13_cookie_session/">
<style type="text/css">
ul li {
list-style: none;
}
</style>
</head>
<body>
<iframe name="target" width="500" height="200" style="..."></iframe>
<div style="...">
<ul>
<li><a href="cookieServlet?action=createCookie" target="target">Cookie的创建</a></li>
<li><a href="cookieServlet?action=getCookie" target="target">Cookie的获取</a></li>
<li><a href="cookieServlet?action=updateCookie" target="target">Cookie的修改</a></li>
<li>Cookie的生存周期</li>
<li>
<ul>
<li><a href="cookieServlet?action=defaultLife" target="target">Cookie的默认存活时间</a></li>
<li><a href="cookieServlet?action=deleteNow" target="target">Cookie立即删除</a></li>
<li><a href="cookieServlet?action=life60" target="target">Cookie存活60秒</a></li>
</ul>
</li>
<li><a href="" target="target">Cookie的路径设置</a></li>
<li><a href="" target="target">Cookie的用户免登陆练习</a></li>
</ul>
</div>
</body>
</html>
2.6 Cookie的有效路径Path的设置
2.6.1 setPath()方法的代码演示
package com.wind.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
/**
//测试7.测试cookie的path属性
*/
public class CookieServlet extends HttpServlet {
private static final long serialVersionUID = 6898486426877817687L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决POST请求中的中文乱码问题,一定要在获取请求参数之前调用才有效
request.setCharacterEncoding("UTF-8");
//解决响应中的中文乱码问题
response.setContentType("text/html; charset=UTF-8");
String action = request.getParameter("action");
try {
//反射方式:获取action业务鉴别字符串,获取相应的业务方法
Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
method.invoke(new CookieServlet(), request, response);
System.out.println(method);
} catch (Exception e) {
System.out.println("CookieServlet error..." + e);
}
}
//测试1:创建cookie对象
private void createCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//1.创建Cookie对象,并且向对象中设置值
Cookie cookie1 = new Cookie("key1", "value1");
Cookie cookie2 = new Cookie("key2", "value2");
//2.向响应中写入Cookie,通知客户端保存Cookie对象
response.addCookie(cookie1);
response.addCookie(cookie2);
response.getWriter().write("cookie创建成功");
}
//测试2:获取cookie对象
private void getCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//3.服务器端获取从客户端发送过来的cookie数据
Cookie[] cookies = request.getCookies();
//4.服务器端获取Cookie对象的值
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
if (cookie != null) {
response.getWriter().write("Cookie[" + cookie.getName() + "=" + cookie.getValue() + "]<br/>");
}
}
}
//5.如果只想要某一个cookie,则需要这样做
Cookie iWantCookie = CookieUtils.findCookie("key1", cookies);
response.getWriter().write("找到了我想要的Cookie[" + iWantCookie.getName() + "=" + iWantCookie.getValue() + "]");
}
//测试3.cookie的修改
private void updateCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {
//方案一:
//1.先创建一个需要修改的同名的cookie
//2.然后通过cookie的构造器重新给需要修改的cookie的key赋予一个新的value值
Cookie cookie = new Cookie("key1", "newValue1");
//3.写回到响应中
response.addCookie(cookie);
response.getWriter().write("修改了我想要修改的Cookie1[" + cookie.getName() + "=" + cookie.getValue() + "]");
//方案二:
Cookie[] cookies = request.getCookies();
Cookie cookie2 = CookieUtils.findCookie("key2", cookies);
if (cookie2 != null) {
cookie2.setValue("newValue2");
response.addCookie(cookie2);
response.getWriter().write("修改了我想要修改的Cookie2[" + cookie2.getName() + "=" + cookie2.getValue() + "]");
}
}
//测试4.测试cookie的默认过期时间
private void defaultLife(HttpServletRequest request, HttpServletResponse response) throws IOException {
Cookie cookie = new Cookie("defaultLife", "defaultLife");
//默认是:浏览器一关闭,cookie即被删除了(需要等待浏览器关闭)
cookie.setMaxAge(-1);
response.addCookie(cookie);
}
//测试5.测试马上删除cookie
private void deleteNow(HttpServletRequest request, HttpServletResponse response) throws IOException {
Cookie[] cookies = request.getCookies();
//1.先找到你要删除的cookie
Cookie cookie1 = CookieUtils.findCookie("key1", cookies);
if (cookie1 != null) {
//2.调用setMaxAge方法设置过期时间
//设置0,表示cookie被马上删除,都不需要等待浏览器关闭
cookie1.setMaxAge(0);
//3.回传给客户端
response.addCookie(cookie1);
response.getWriter().write("key1的cookie1已经被删除了");
}
}
//测试6.测试cookie的存活时间为60s
private void life60(HttpServletRequest request, HttpServletResponse response) throws IOException {
Cookie[] cookies = request.getCookies();
Cookie cookie = new Cookie("life60", "life60");
//设置cookie的存活时间为60s
cookie.setMaxAge(60);
response.addCookie(cookie);
}
//测试7.测试cookie的path属性
private void testPath(HttpServletRequest request, HttpServletResponse response) throws IOException {
Cookie[] cookies = request.getCookies();
Cookie cookie = new Cookie("testPath", "testPath");
//request.getContextPath():得到工程路径
//request.getContextPath() + "/abc":/工程路径/abc
cookie.setPath(request.getContextPath() + "/abc");
response.addCookie(cookie);
response.getWriter().write("创建了一个带有/abc这个path路径属性的cookie");
}
}
2.7 Cookies练习-面用户名登陆演示-项目结构
2.7.1 编写一个登陆的Servlet处理器
package com.wind.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
免用户名登陆测试
*/
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 8426663113333075280L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
if ("abc".equals(username) && "123".equals(password)) {
Cookie cookie = new Cookie("username", username);
//当前cookie60秒内有效
cookie.setMaxAge(60);
response.addCookie(cookie);
System.out.println("登陆 成功");
} else {
System.out.println("登陆 失败");
}
}
}
2.7.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>LoginServlet</servlet-name>
<servlet-class>com.wind.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/loginServlet</url-pattern>
</servlet-mapping>
</web-app>
2.7.3 编写一个前端登陆页面jsp
<%--
Created by IntelliJ IDEA.
Date: 2020/12/23
Time: 23:43
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${cookie}
<form action="http://localhost:8080/13_cookie_session/loginServlet" method="get">
用户名:<input type="text" name="username" id="${cookie.username.value}"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登陆">
</form>
</body>
</html>
2.7.4 测试
略。
3 谷歌浏览器如何查看Cookie:MAC中:fn+f12