table des matières
1.2 Technologie de conversation
2.3 Principe de fonctionnement
2.4.1 Le serveur envoie plusieurs cookies?
2.4.2 Combien de temps le cookie est-il conservé dans le navigateur?
2.4.3 Les cookies peuvent-ils stocker du chinois?
2.5 Caractéristiques des cookies
3.3 Principe de fonctionnement
Quatre résumé de trois objets de domaine
Un aperçu de la session
1.1 Qu'est-ce qu'une session?
Dans la vie quotidienne: le processus consistant à poser des questions et à y répondre entre le moment où vous passez un appel et le moment où vous raccrochez est une conversation.
Dans l'architecture B / S: lorsque le navigateur envoie une requête au serveur pour la première fois, une session est établie; jusqu'à ce que l'une des parties se déconnecte, la session se termine.
Une session: contient plusieurs demandes et réponses.
1.2 Technologie de conversation
Question: Http est un protocole sans état. Deux requêtes consécutives dans la même session sont indépendantes l'une de l'autre et ne se comprennent pas.
Fonction: Utilisée pour == stockage == données générées par le navigateur et le serveur dans le processus de requête et de réponse = =
Technologie de session client: cookie
technologie de session côté serveur: session
Deux cookies [points clés]
2.1 Aperçu
Fonction cookie: partager des données entre plusieurs demandes dans une session, enregistrer les données sur le client (navigateur)
jd panier d'achat
2.2 Démarrage rapide
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 Principe de fonctionnement
Basé sur le protocole HTTP: cookie d'en-tête de demande et cookie d'en-tête de réponse
2.4 Détails des cookies
2.4.1 Le serveur envoie plusieurs 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 Combien de temps le cookie est-il conservé dans le navigateur?
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 Les cookies peuvent-ils stocker du chinois?
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 Caractéristiques des cookies
Trois sessions [Points clés]
3.1 Aperçu
Utiliser les problèmes de cookies
1. Stocker jusqu'à 4K chaînes
2. Stocker les données n'est pas sûr.
Fonction de session: partager des données entre plusieurs demandes dans une session et enregistrer les données sur le serveur
3.2 Démarrage rapide
HttpSession est également un objet de domaine
Analyse des étapes
1. Stockez les données dans la session
// 1. Récupérez l'objet de session via l'objet de requête
HttpSession session = request.getSession ();
// 2. Utilisez l'API de session et stockez les données
session.setAttribute ("username" , "Haha, haha");2. Récupérez les données de la session
// 1. Obtenez l'objet de session via l'objet de requête
HttpSession session = request.getSession ();
// 2. Utilisez l'API de session pour obtenir les données
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 Principe de fonctionnement
La session est basée sur la technologie des cookies
3.4 Cycle de vie
Quatre résumé de trois objets de domaine
demande 、 session 、 ServletContext
4.1 API
4.2 Cycle de vie
Quand créer | Quand détruire | Champ d'action | |
---|---|---|---|
ServletContext | Le serveur démarre normalement, Créé lors du chargement du projet |
Le serveur est en panne ou Détruire lorsque le projet est déchargé |
Projet Web complet (Données partagées) |
HttpSession | L'utilisateur appelle request.getSession () pour la première fois Méthode créée |
Le serveur s'arrête anormalement, inactif pendant 30 minutes, suicide |
En une session, entre plusieurs demandes (Données partagées) |
Demande HttpServlet | Créé lorsque l'utilisateur envoie une demande | Détruire après que le serveur a répondu |
Une demande, transmise à plusieurs reprises entre (Données partagées) |
4.3 Résumé
Peut utiliser des petits mais pas des grands:
request <session <servletContext
Scénarios courants:
requête: le résultat d'une requête (transfert de servlet jsp)
session: stocker les données privées de la session en cours,
le
code de vérification du statut de connexion de l'utilisateur, le
panier de statut de connexion de l'utilisateur
servletContext: si vous avez besoin que toutes les servlets puissent y accéder, utilisez cet objet de domaine.