2.3.4 Los tres dominios principales de Cookie & Session, solicitud, sesión, servletContext, API de operación, tiempo de creación y destrucción, alcance de acción

Tabla de contenido

Una descripción general de la sesión

1.1 ¿Qué es una sesión?

1.2 Tecnología de conversación

Dos cookies [puntos clave]

2.1 Resumen

2.2 Inicio rápido

2.3 Principio de funcionamiento

2.4 Detalles de las cookies

2.4.1 ¿El servidor envía múltiples cookies?

2.4.2 ¿Cuánto tiempo se guarda la cookie en el navegador?

2.4.3 ¿Se pueden almacenar las cookies en chino?

2.5 Características de las cookies

Tres sesiones [puntos clave]

3.1 Resumen

3.2 Inicio rápido

3.3 Principio de funcionamiento

3.4 Ciclo de vida

Cuatro resumen de tres objetos de dominio

4.1 API

4.2 Ciclo de vida

4.3 Resumen



Una descripción general de la sesión

1.1 ¿Qué es una sesión?

En la vida diaria: el proceso de hacer y responder preguntas desde que haces una llamada hasta que cuelgas es una conversación.
En la arquitectura B / S: cuando el navegador envía una solicitud al servidor por primera vez, se establece una sesión; hasta que una de las partes se desconecta, la sesión finaliza.
Una sesión: contiene múltiples solicitudes y respuestas.

1.2 Tecnología de conversación

Pregunta: Http es un protocolo sin estado. Dos solicitudes consecutivas en la misma sesión son independientes entre sí y no se entienden.
Función: Se usa para == almacenamiento == datos generados por el navegador y el servidor en el proceso de solicitud y respuesta = =
Tecnología de sesión del cliente: tecnología de sesión
del lado del servidor de cookies : sesión

Dos cookies [puntos clave]

2.1 Resumen

Función de cookie: compartir datos entre múltiples solicitudes en una sesión, guardar los datos en el
carrito de compras jd del cliente (navegador)

 

 

2.2 Inicio rápido

public class SetServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.创建cookie对象,设置数据
        Cookie cookie = new Cookie("name","jack");
        // 2.通过response,响应(返回)cookie
        response.addCookie(cookie);
    }
}

public class GetServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        req.setCharacterEncoding("UTF-8");
        // 1. 通过request对象,获取到携带的所有cookie
        Cookie[] cookies = req.getCookies();

        // 2. 遍历数组
        if(cookies !=null ){
            for (Cookie cookie : cookies) {
                // 获取的就是cookie的name值
                String name = cookie.getName();
                // 获取cookie的value值
                String value = cookie.getValue();
                System.out.println(name + "----" + value );
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
<servlet>
        <servlet-name>GetServlet</servlet-name>
        <servlet-class>com.lagou.servlet.GetServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>GetServlet</servlet-name>
        <url-pattern>/getServlet</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>SetServlet</servlet-name>
        <servlet-class>com.lagou.servlet.SetServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SetServlet</servlet-name>
        <url-pattern>/setServlet</url-pattern>
    </servlet-mapping>

 

2.3 Principio de funcionamiento

Basado en el protocolo HTTP: cookie de encabezado de solicitud y cookie de encabezado de respuesta

 

2.4 Detalles de las cookies

2.4.1 ¿El servidor envía múltiples cookies?

public class SetServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 1. 创建cookie对象,设置数据
        Cookie cookie1 = new Cookie("name", "jack");
        Cookie cookie2 = new Cookie("age", "18");

        // 2. 通过response对象响应cookie
        resp.addCookie(cookie1);
        resp.addCookie(cookie2);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

 

2.4.2 ¿Cuánto tiempo se guarda la cookie en el navegador?


public class MaxAgeCookie extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 1. 创建cookie对象,设置数据
        Cookie cookie1 = new Cookie("name", "jack");
        // 设置cookie的存活时间
        // -1 浏览器关闭,cookie就销毁
        // cookie1.setMaxAge(-1);
        // 正数 存活60秒,过期销毁
        // cookie1.setMaxAge(60*10);
        // 0 立即销毁
        cookie1.setMaxAge(0);

        // 2. 通过response对象响应cookie
        resp.addCookie(cookie1);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
<servlet>
        <servlet-name>MaxAgeCookie</servlet-name>
        <servlet-class>com.lagou.servlet.MaxAgeCookie</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>MaxAgeCookie</servlet-name>
        <url-pattern>/maxAgeCookie</url-pattern>
    </servlet-mapping>

 

2.4.3 ¿Se pueden almacenar las cookies en chino?


public class SetServlet extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 1. 创建cookie对象,设置数据
        String encodevalue = URLEncoder.encode("杰克 ", "UTF-8");
        cookie1 = new Cookie("name", encodevalue);
        Cookie cookie2 = new Cookie("age", "18");

        // 2. 通过response对象响应cookie
        resp.addCookie(cookie1);
        resp.addCookie(cookie2);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

public class GetServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        req.setCharacterEncoding("UTF-8");
        // 1. 通过request对象,获取到携带的所有cookie
        Cookie[] cookies = req.getCookies();

        // 2. 遍历数组
        if(cookies !=null ){
            for (Cookie cookie : cookies) {
                // 获取的就是cookie的name值
                String name = cookie.getName();

                // 获取cookie的value值
                String decodevalue = URLDecoder.decode(value, "UTF-8");

                System.out.println(name + "----" + decodevalue);
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

 

2.5 Características de las cookies

 

 

Tres sesiones [puntos clave]

3.1 Resumen

Problemas de uso de cookies
        1. Almacene hasta 4K cadenas
        2. Almacene los datos no es seguro
Función de sesión: comparta datos entre múltiples solicitudes en una sesión y guarde los datos en el servidor

 

3.2 Inicio rápido

HttpSession también es un objeto de dominio

Análisis de pasos
1. Almacenar los datos en la sesión
    // 1. Obtener el objeto de sesión a través del objeto de solicitud

        HttpSession session = request.getSession ();
    // 2. Operar la API de sesión y almacenar los datos
        session.setAttribute ("username" , "Jaja, jaja");

2. Obtener datos de la sesión
    // 1. Obtener el objeto de la sesión a través del objeto de solicitud

        HttpSession session = request.getSession ();
    // 2. Operar la API de la sesión para obtener los datos
        session.getAttribute ("username");


public class SetSession extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 将需要共享的数据存到session中
         // 1.获取到session对象
        HttpSession session = req.getSession();
         // 2.通过session对象进行数据存入
        session.setAttribute("name","哈哈,呵呵");
        System.out.println("当前已将共享数据存到session中.....");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

public class GetSession extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 将session中的共享数据取出来
        // 1.获取session对象
        HttpSession session = req.getSession();
        // 2.获取共享数据
        String name = (String) session.getAttribute("name");
        System.out.println(name);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

 

3.3 Principio de funcionamiento

La sesión se basa en la tecnología Cookie

 

3.4 Ciclo de vida

 

 

Cuatro resumen de tres objetos de dominio

solicitud 、 sesión 、 ServletContext

4.1 API

 

4.2 Ciclo de vida

  Cuando crear Cuando destruir Ámbito de acción
ServletContext

El servidor se inicia normalmente,

Creado cuando se carga el proyecto

El servidor está inactivo o

Destruir cuando se descarga el proyecto

Proyecto web completo

(Datos compartidos)

HttpSession

El usuario llama a request.getSession () por primera vez

Método creado

El servidor se apaga de forma anormal,
inactivo durante 30 minutos,
suicidio

En una sesión, entre múltiples solicitudes

(Datos compartidos)

Solicitud de HttpServlet Creado cuando el usuario envía una solicitud

Destruir después de que el servidor responda

Una solicitud, reenviada repetidamente entre

(Datos compartidos)

 

 

 

 

 

 

 

 

 

4.3 Resumen

Puede usar pequeños pero no grandes:

        solicitud <sesión <servletContext

Escenarios comunes:
    solicitud: el resultado de una consulta (reenvío de servlet jsp)   

    sesión: almacena los datos privados de la sesión actual,
        el
        código de verificación del estado de inicio de sesión del usuario , el estado de inicio de sesión del usuario , el
        carrito de compras

    servletContext:   si necesita que todos los servlets puedan acceder, utilice este objeto de dominio.

 

 

Supongo que te gusta

Origin blog.csdn.net/chengh1993/article/details/109861182
Recomendado
Clasificación