Tabla de contenido
Una descripción general de la sesión
1.2 Tecnología de conversación
2.3 Principio de funcionamiento
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
3.3 Principio de funcionamiento
Cuatro resumen de tres objetos de dominio
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.