2.3.4 Les trois domaines principaux de Cookie & Session, request, session, servletContext, operation API, creation and destruction timing, scope of action

table des matières

Un aperçu de la session

1.1 Qu'est-ce qu'une session?

1.2 Technologie de conversation

Deux cookies [points clés]

2.1 Aperçu

2.2 Démarrage rapide

2.3 Principe de fonctionnement

2.4 Détails des cookies

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

Trois sessions [Points clés]

3.1 Aperçu

3.2 Démarrage rapide

3.3 Principe de fonctionnement

3.4 Cycle de vie

Quatre résumé de trois objets de domaine

4.1 API

4.2 Cycle de vie

4.3 Résumé



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.

 

 

Je suppose que tu aimes

Origine blog.csdn.net/chengh1993/article/details/109861182
conseillé
Classement