2020/2/8学习总结

今天学习了session和cookie的相关内容

一、会话技术
一次会话过程指的是会从打开浏览器到关闭浏览器的过程,在此过程中包含多次请求和响应,会话指的就是这些请求和响应。
由于HTTP是无状态的协议,每一次的请求和响应都是相互独立的。而在实际的操作中,完成一些比较复杂的功能时需要在多次不同的请求和响应之间交互。所以为了使不同请求和响应之间能够交互,便产生了会话技术。
会话技术主要有两类:

cookie
cookie是客户端技术,程序把每个用户的数据以cookie的形式保存到各自客户端浏览器中。当用户使用浏览器再次访问服务器中的web资源的时候,就可以从自己保存的cookie里面获取一些有用信息。

session
session是服务器端技术,服务器在运行时可以为每一个用户的浏览器创建一个独享的session对象。由于session为用户浏览器独享,所有用户在访问服务器的时候,可以把各自的数据放在各自的session中,当用户再次访问服务器中的web资源的时候,其他web资源再从用户各自的session中取出数据为用户服务。

二、cookie的简单使用
cookie是客户端会话技术,将数据保存到客户端。
cookie就是一串字符串,格式就是键值对,用分号隔开。使用cookie时,调用Java自带的相应的API即可。
使用cookie的步骤如下:

创建cookie对象,绑定数据
发送cookie对象
获取cookie对象,得到数据
下面是一个简单实例的完整代码,CookieTest1创建并发送cookie,CookieTest2获取cookie。

  • CookieTest1
    package com.study.cookieandsessionstudy;
    
    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;
    import java.io.IOException;
    
    @WebServlet(name = "CookieTest1", value = "/CookieTest1")
    public class CookieTest1 extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            //创建cookie 注意这里穿的value字符不要加空格,addCookie时是不能使用空格的
            Cookie cookie = new Cookie("msg", "hello-world");
    
            //发送cookie
            response.addCookie(cookie);
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
    
        }
    }
    • CookieTest2
    • package com.study.cookieandsessionstudy;
      
      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;
      import java.io.IOException;
      
      @WebServlet(name = "CookieTest2", value = "/CookieTest2")
      public class CookieTest2 extends HttpServlet {
          @Override
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
              //获取cookie
              Cookie[] cookies = request.getCookies();
      
              String name;
              String value;
      
              if (cookies != null) {
                  for (Cookie cookie : cookies) {
                      name = cookie.getName();
                      value = cookie.getValue();
                      System.out.println("name:" + name);
                      System.out.println("value:" + value);
                  }
      
              }
      
          }
      
          @Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
              this.doPost(request, response);
      
          }
      }

      三、session的简单使用

    • session是服务器端技术,服务器在运行时可以为每一个用户的浏览器创建一个独享的session对象。
    • session的使用步骤:

      获取session对象
      使用session存储数据
      使用session获取数据
      注意session与cookie在使用时的差异,cookie是Cookie对象,而session是HttpSession对象;cookie对象由自己创建,而session对象是获取对象(request.getSession()),而不用自己创建HttpSession对象。

      下面是一个简单的session案例,SessionTest1存储数据,SessionTest2获取数据。

    • SessionTest1
      package com.study.cookieandsessionstudy;
      
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import javax.servlet.http.HttpSession;
      import java.io.IOException;
      
      @WebServlet(name = "SessionTest1", value = "/SessionTest1")
      public class SessionTest1 extends HttpServlet {
          @Override
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
              //获取session
              HttpSession httpSession = request.getSession();
      
              //存储数据
              httpSession.setAttribute("msg", "hello-world");
          }
      
          @Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
              this.doPost(request, response);
      
          }
      }

      SessionTest2:

    • package com.study.cookieandsessionstudy;
      
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import javax.servlet.http.HttpSession;
      import java.io.IOException;
      
      @WebServlet(name = "SessionTest2", value = "/SessionTest2")
      public class SessionTest2 extends HttpServlet {
          @Override
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
              //获取session
              HttpSession httpSession = request.getSession();
      
              //获取数据
              Object object = httpSession.getAttribute("msg");
              System.out.println(object);
      
          }
      
          @Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
              this.doPost(request, response);
      
          }
      }
原文地址:https://www.cnblogs.com/wangzhaojun1670/p/12287899.html