不同的请求使用相同的请求数据,但是请求只要结束数据就被销毁了,其他请求需要将公共数据重新书写发送
以重定向上篇学习的重定向为例子,
首先我们发起第一次请求的时候,服务器解决请求发现是需要使用重定向的
然后告知浏览器需要访问新的servlet来处理,
这时候我们就需要跳转到新的链接去处理
在这个时候,服务器同时也做了一件事,
服务器会根据第一次的请求,告诉浏览器将他下一次请求所需要使用的请求数据保存下来,并在其他请求中附带上这次保存的数据
浏览器知道后,就把服务器告知下次请求需要附带的数据保存起来,并在下次访问的时候使用,也就是下一次请求的时候,会发送(新的请求数据 + 服务器告知保存的数据)
而这里服务器需要浏览器保存并在其他请求附带上的共用请求数据就是Cookie
Cookie特点
>浏览器端的数据存储技术
>存储的数据是在服务器端进行声明,并以响应的方式告诉浏览器进行存储在下次发起请求时附带
>存储内容有限,不适合大量数据的存储
>不设置有效期浏览器关闭就会失效
Cookie作用:
解决了不同请求之前请求数据共享的问题
Cookie使用特点:
创建cookie
Cookie c1 = new Cookie("key", "value");
设置cookie(存活时间):如果不设置,cookie存放在内存中,浏览器关闭,cookie随之消亡
Cookie c2 = new Cookie("mouse", "Razor");
// 设置最大存活时间
// 以秒为单位制定Cookie的最大存活时间
// 正整数表示Cookie存活的时长
// 负整数表示不存储Cookie, 当客户端关闭浏览器时Cookie被销毁
// 0表示立马删除Cookie
c2.setMaxAge(100); // 10 * 24 * 60 * 60
设置cookie(访问路径):如果不设置,那访问服务器下的所有servlet都会使用cookice,但是设置了,只有访问浏览器下特定的servlet才会携带设置好的cookie
Cookie c3 = new Cookie("keyboard", "deiog");
// 设置c3的访问路径
// 下面路径表名只有当访问当前项目下的demo目录下的所有路径时, 才会携带c3
c3.setPath(req.getContextPath() + "/demo");
完整代码
package com.bjsxt.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 CookieServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 创建Cookie对象
Cookie c1 = new Cookie("computer", "dell");
// 发送到客户端存储
// 发送一个响应头, Set-Cookie: computer=dell
resp.addCookie(c1);
// 再创建一个Cookie, 用于设置最大存活时间
Cookie c2 = new Cookie("mouse", "Razor");
// 设置最大存活时间
// 以秒为单位制定Cookie的最大存活时间
// 正整数表示Cookie存活的时长
// 负整数表示不存储Cookie, 当客户端关闭浏览器时Cookie被销毁
// 0表示立马删除Cookie
c2.setMaxAge(100); // 10 * 24 * 60 * 60
resp.addCookie(c2);
// 再创建一个Cookie, 用于设置访问路径
Cookie c3 = new Cookie("keyboard", "deiog");
// 设置c3的访问路径
// 下面路径表名只有当访问当前项目下的demo目录下的所有路径时, 才会携带c3
c3.setPath(req.getContextPath() + "/demo");
resp.addCookie(c3);
}
}
servlet1
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.net.URLEncoder;
public class ServletCookie extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1 设置请求编码格式
req.setCharacterEncoding("utf-8");
//2 设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
//3 获取请求信息
String uname = req.getParameter("uname");
String pwd = req.getParameter("pwd");
//4 处理请求信息
System.out.println(uname+"=="+pwd);
//5 响应处理结果
//5.3 响应重定向
//创建cookie
Cookie cookie = new Cookie("uname", URLEncoder.encode(uname, "UTF-8") );
//设置有效时间 单位秒
cookie.setMaxAge(3600*24);
//设置特定访问路径才带上cookie 如果不设置那么访问服务器内的所有servlet都会带上cookie
cookie.setPath("/cookie2");
// 发送到客户端存储
// 发送一个响应头, Set-Cookie: computer=dell
resp.addCookie(cookie);
resp.sendRedirect("/cookie2");
}
}
servlet2
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.net.URLDecoder;
public class ServiceCookie2 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
System.out.println("这里是Cookie2");
//获取cookie数据
String cook =null;
Cookie[] cookies = req.getCookies();
//输出cookie 数据
for (Cookie cookie : cookies) {
if ("uname".equals(cookie.getName())) {
cook = URLDecoder.decode(cookie.getValue(), "UTF-8");
}
}
System.out.println(cook);
}
}
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!