目录
会话:用户打开浏览器,访问web浏览器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。
会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自同一浏览器,以便在同一会话的多次请求间共享数据。
HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将请求视为新的请求,因此我们需要会话跟踪技术来实现会话内数据共享。
实现方式:
1、客户端会话根据技术:Cookie
2、服务端会话跟踪技术:Session
Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
Cookie基本使用:发送Cookie
1、创建Cookie对象,设置数据
Cookie cookie = new Cookie("key","value");
2、发送Cookie到客户端:使用response对象
response.addCookie(cookie);
代码示例:
- import javax.servlet.*;
- import javax.servlet.http.*;
- import javax.servlet.annotation.*;
- import java.io.IOException;
-
- @WebServlet("/aServlet")
- public class AServlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //发送cookie
-
- //1.创建cookie对象
- Cookie cookie = new Cookie("username","zs");
-
- //2.发送cookie,response
- response.addCookie(cookie);
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
执行结果访问对象的Servlet时:
Cookie的位置及显示信息:
获取Cookie:
3、获取客户端携带的所有Cookie,使用request对象
Cookie[] cookies = request.getCookies();
4、遍历数组,获取每一个Cookie对象:for
5、使用Cookie对象方法获取数据
cookie.getName();
cookie.getValue();
代码示例:
- import javax.servlet.*;
- import javax.servlet.http.*;
- import javax.servlet.annotation.*;
- import java.io.IOException;
- import java.net.URLDecoder;
-
- @WebServlet("/bServlet")
- public class BServlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //获取Cookie
-
- //1.获取Cookie数据
- Cookie[] cookies = request.getCookies();
-
- //2.遍历数组
- for (Cookie cookie : cookies) {
- //3.获取数据
- String name = cookie.getName();
- if ("username".equals(name)) {
- String value = cookie.getValue();
- // URL解码
- value = URLDecoder.decode(value,"UTF-8");
- System.out.println(name + ":" + value);
-
- break;
- }
- }
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
执行结果:
先访问aServlet:
再访问bServlet:
控制台输出: