CodeGym/Cours Java/Module 3/Travailler avec des sessions de servlet

Travailler avec des sessions de servlet

Disponible

4.1 Introduction à HTTPSession

Si plusieurs requêtes proviennent du même client, alors ils disent qu'une session a été établie entre le client et le serveur. Pour contrôler ce processus, le conteneur a un objet HttpSession spécial.

Lorsqu'un client fait une demande à un servlet, le conteneur de servlet vérifie si le paramètre d'ID de session est présent dans la demande. Si un tel paramètre n'existe pas (par exemple, le client contacte le serveur pour la première fois), le conteneur de servlet crée un nouvel objet HttpSession et lui attribue également un ID unique.

L'objet de session est stocké sur le serveur, et l'ID est envoyé dans la réponse au client, et par défaut est stocké sur le client dans un cookie. Ensuite, lorsqu'une nouvelle requête arrive du même client, le conteneur de servlet en récupère l'ID et, par cet ID, trouve l'objet HttpSession correct sur le serveur.

Vous pouvez obtenir l'objet de session à partir d'une requête (un objet HttpServletRequest), sur laquelle vous devez appeler la méthode getSession(). Il renvoie un objet HttpSession.

Pourquoi une séance est-elle nécessaire ? Il peut stocker des informations sur le client entre les appels. Elle a quelque chose comme un HashMap à l'intérieur, dans lequel vous pouvez stocker des objets par clés. Et quelques méthodes pour cela:

Méthodes Description
1 setAttribute(String name, Object o) Ajoute un objet à la session
2 getAttribute(String name) Obtient un objet de la session
3 removeAttribute(String name) Supprime un objet de la session

Écrivons une servlet qui résumera tous les nombres qui lui sont passés à partir de différentes requêtes :

public class CalculatorServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
         // Get the "sum" attribute from the session
        HttpSession session = request.getSession();
        Integer sum = (Integer) session.getAttribute("sum");
        //Handling the situation when the session does not yet have such an attribute
        if (sum == null)
            sum = 0;

         // Get the "n" parameter from the request
        String n = request.getParameter("n");
        sum += Integer.parseInt(n);

         // Write the "sum" attribute to the session
        session.setAttribute("sum", sum);

        // Print the HTML as a response to the browser
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head> <title> CalculatorServlet </title> </head>");
        out.println("<body>");
        out.println("<h1> Sum == " + sum + "</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

4.2 En savoir plus sur HttpSession

Y a-t-il autre chose que nous n'avons pas dit à propos de l'objet HttpSession ?

Premièrement, c'est le nom J SESSION ID. C'est en dessous que l'identifiant de session est stocké dans les cookies. Comme vous pouvez le voir, c'est assez facile à retenir : J+SESSION+ID.

Deuxièmement, la session a quelques méthodes plus utiles :

Méthodes Description
1 getAttributeNames() Renvoie une liste de toutes les clés stockées dans la session
2 getId() Renvoie l'ID de session (chaîne)
3 isNew() Renvoie true si l'objet de session a été créé dans la requête en cours
4 setMaxInactiveInterval(int seconds) Définit l'intervalle d'inactivité de la session en secondes
5 invalidate() Supprime tous les objets de la session

Ici, toutes les méthodes sont évidentes, mais setMaxInactiveInterval()nous en reparlerons un peu plus.

Si le serveur stocke des dizaines de milliers de sessions, y compris les données des clients qui l'ont visité le mois dernier, il manquera simplement de mémoire. Par conséquent, il existe un moyen de définir la "durée de vie de la session".

Si personne n'a utilisé la session pendant un intervalle de temps, elle s'efface d'elle-même - tous les objets qu'elle a stockés en sont supprimés. Ceci est fait pour économiser de la mémoire.

Par défaut, cet intervalle est de 1800 secondes == 30 minutes. Si vous définissez la valeur sur -1, la session sera "éternelle" et ne sera supprimée que lorsque l'utilisateur ferme l'onglet du navigateur (enfin, ou que le client se déconnecte).

Exemples:

// get all keys
Enumeration keys = session.getAttributeNames();
while( keys.hasMoreElements() ){
    System.out.println( (String) keys.nextElement() );
}
// set the inactivity interval
session.setMaxInactiveInterval(60*60*24);   // 1 day
session.setMaxInactiveInterval(-1); // until the browser is closed
// remove all data from the session
session.invalidate();
Commentaires
  • Populaires
  • Nouveau
  • Anciennes
Tu dois être connecté(e) pour laisser un commentaire
Cette page ne comporte pas encore de commentaires