IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Les méthodes de sessions: getCreationTime() et getLastAccessedTime()


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Points : 12
    Points
    12
    Par défaut Les méthodes de sessions: getCreationTime() et getLastAccessedTime()
    Salut,

    Voilà, j'ai 2 servlets dans mon projet: TestServlet.java et SessionServlet.java.

    Dans le doGet de mon SessionServlet j'initialise une session:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    HttpSession ses= request.getSession(true).
    String chaine="test";
    ses.setAttribute("mavaleur",chaine);
    Je fais un printout pour voir la date de création et la date du dernière accès de la session:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.out.println(ses.getCreationTime());
    System.out.println(ses.getLastAccessedTime());
    Quand je démarre mon application et que j'appelle directement mon servlet de session, La date de création=La date du dernier accès.Ce qui est normal.Si ensuite j'appelle TestServlet, j'attens 1 min et je reviens vers la sessionServlet, la date du dernier accès dépasse la date de création de la session.Ce qui est normal aussi. Jusqu'ici , tout va bien.
    Mais si par exemple je redémarre mon application, j'appelle en premier mon servlet TestServlet, et J'attends 1 min, ensuite j'appelle mon servlet de session, je vois que la date du dernier accès de la session dépasse la date de création de 1min.

    Comment ça se fait que lorsque j'ai appelé le servlet Test ça m'a initialiser une session, alors que j'ai rien initialiser dans ce servlet.

    Pour faire court, j'aimerais que la session débute juste lorsque j'appelle mon servlet session en premier, même si j'ai fais appel à des autres servlet avant.

    Merci d'avance

  2. #2
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Pour cela mais je ne suis pas sûr à 100 % tu invalides ta session dans SessionServlet

    Une session est présente dès que tu ouvres une page internet et que tu accède à une servlet peut importe laquelle même si tu ne l'utilise pas.


    ps : si je dis des bétises hésité pas à me reprendre

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par link256 Voir le message
    Pour cela mais je ne suis pas sûr à 100 % tu invalides ta session dans SessionServlet

    Si je fais ça, le moment de création de la session part à zéro dans toute l'application. Donc, à chaque fois que j'appelle ma page session, le compteur se met à zéro, alors que je veux démarrer la session seulement si j'appelle le Servlet session pour la première fois.

    Citation Envoyé par link256 Voir le message
    Une session est présente dès que tu ouvres une page internet et que tu accède à une servlet peut importe laquelle même si tu ne l'utilise pas.
    Donc les sessions dans J2EE c'est mal fait !!. Comment ca se fait qu'il me démarre une session dans un servlet autre que celui où je crée ma session ?

  4. #4
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Tu peux aussi donner un paramètre d'initialisation à SessionServlet
    pour effectuer une seule fois session.invalidate()

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par link256 Voir le message
    Tu peux aussi donner un paramètre d'initialisation à SessionServlet
    Qu'est ce tu veux dire au juste ?

  6. #6
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Quand tu te connecte la toute premiere fois a ton application tu commences par acceder à ta SessionServlet, dans ce cas la tu peux lui passer un paramètre dans la request

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par link256 Voir le message
    Quand tu te connecte la toute premiere fois a ton application tu commences par acceder à ta SessionServlet, dans ce cas la tu peux lui passer un paramètre dans la request
    Justement, quand je démarre mon application pour la première fois, c'est pas mon servlet Session que j'appelle en premier, mais bien TestServlet.

    Et dès que j'appelle TestServlet, une session démarre alors que je veux que la session démarre une fois avoir appelé SessionServlet.

    Donc:

    1-Si on appele SessionServlet pour la première on démarre une session.
    -Si ensuite on appelle TestServlet, la session continue puisque j'ai déjà appeler SessionServlet.

    2-Si on appele TestServlet pour la première on ne démarre pas de session.
    -Si ensuite on appelle SessionServlet, la session démarre.

    et ainsi de suite.

    J'ai intégré cette logique dans le code, mais la session démarre toujours dès que j'ouvre pour la première fois mon application qui appelle TestServlet

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Dès que tu fais request.getSession() tu créés une session (d'ailleurs, c'est identique à request.getSession(true))
    Il faudrait dans l'autre servlet faire request.getSession(false).
    Ainsi, si elle n'existe pas, ça renvoie null (à tester avant tout autre traitement bien sûr)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Dès que tu fais request.getSession() tu créés une session (d'ailleurs, c'est identique à request.getSession(true))
    Donc si je comprends bien, quand je démarre mon application avec TestServlet qui ne contient aucune méthode de session, le web.xml va chercher dans tous mes servlets si il ya une fonction request.getSession(), si c'est le cas, il démarre une session, même si j'ai pas encore appeler le servlet qui contient la fonction request.getSession(true) ?

    Eh ben.

  10. #10
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dorwin Voir le message
    Donc si je comprends bien, quand je démarre mon application avec TestServlet qui ne contient aucune méthode de session, le web.xml va chercher dans tous mes servlets si il ya une fonction request.getSession(), si c'est le cas, il démarre une session, même si j'ai pas encore appeler le servlet qui contient la fonction request.getSession(true) ?
    Absolument pas...

    Pour éviter de tourner en rond, peux-tu montrer le code de tes 2 servlets et le web.xml ?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Absolument pas...
    C'est ce qui me semblait aussi

    Citation Envoyé par OButterlin Voir le message
    Pour éviter de tourner en rond, peux-tu montrer le code de tes 2 servlets et le web.xml ?

    SessionServlet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public class SessionServlet extends HttpServlet {
     
     public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, java.io.IOException {
     
            response.setContentType("text/html");
            java.io.PrintWriter out = response.getWriter();
            HttpSession session = request.getSession(true);
            Date creationTime = new Date(session.getCreationTime() );
            Date lastAccessed = new Date(session.getLastAccessedTime());
            Date now = new Date();
            DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM);
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Informations sur la session</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h2>Creation et dernier acces de la session</h2>");
            out.println("Date actuel: " + formatter.format(now) + "<br><br>");
            out.println("Session crée le: HttpSession.getCreationTime( ): " + formatter.format(creationTime) + "<br><br>");
            out.println("Dernier accès de la session: HttpSession.getLastAccessedTime( ): " + formatter.format(lastAccessed) );
            out.println("</body>");
            out.println("</html>");
       	}
    }
    TestServlet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    import java.io.IOException;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    /**
     */
    public class TestServlet extends HttpServlet 
    {
    	private static final long serialVersionUID = 1L;
        /**
         * Default constructor. 
         */
        public TestServlet() 
        {
            // TODO Auto-generated constructor stub
        }
     
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    	{
     
              response.setContentType("text/html");
            java.io.PrintWriter out = response.getWriter();
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Test</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h2>Ceci est un test</h2>");
            out.println("</body>");
            out.println("</html>");
       	}
     
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    	{
    		doGet(request,response);
    		// TODO Auto-generated method stub
    	}
    }

    web.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>Application</display-name>
      <servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>source.TestServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/TestServlet</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      <servlet>
        <servlet-name>Session</servlet-name>
        <servlet-class>source.SessionServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>Session</servlet-name>
        <url-pattern>/Session</url-pattern>
      </servlet-mapping>
    </web-app>

    Voilà donc mes deux servlet avec le web.xml, comme j'avais expliqué dans les autres postes, il ya aucun code de session de mon TestServlet.

    Quand je lance l'application, c'est TestServlet qui est executé.
    Si j'attends 2 min, et j'appele après le servlet SessionServlet,
    La date du dernièr accés de session dépasse la date de création de la session de 2 min, ce qui normalement doit etre de 0 puisque je viens juste
    d'appeler mon SessionServlet qui contient la fonction getSession(true).


    Si je récapitule ce que je veux obtenir exactement:


    1-Si j' appele SessionServlet pour la première fois on démarre une session.
    -Si ensuite j' appelle TestServlet, la session continue puisque j'ai déjà appeler SessionServlet.

    2-Si j'appele TestServlet pour la première on ne démarre pas de session.
    -Si ensuite j'appelle SessionServlet, la session démarre.

    et ainsi de suite.

  12. #12
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    getSession(true) ne veut pas dire qu'on initialise une session, ça veut dire :
    donne moi la session et si elle n'existe pas, créé la...

    Dans ton cas, il faudrait "invalider" la session si elle existe déjà (dans sessionServlet), tu pourrais faire ce test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // On demande la session mais sans la créer si elle n'existe pas
    HttpSession session = request.getSession(false);
     
    // session existante, on la "flingue"
    if (session != null) session.invalidate();
     
    // on recréé une nouvelle session
    session = request.getSession();

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    getSession(true) ne veut pas dire qu'on initialise une session, ça veut dire :
    donne moi la session et si elle n'existe pas, créé la...

    Dans ton cas, il faudrait "invalider" la session si elle existe déjà (dans sessionServlet), tu pourrais faire ce test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // On demande la session mais sans la créer si elle n'existe pas
    HttpSession session = request.getSession(false);
     
    // session existante, on la "flingue"
    if (session != null) session.invalidate();
     
    // on recréé une nouvelle session
    session = request.getSession();
    Avec ce bout de code, une nouvelle session est toujours recréée à chaque appel du ServletSession,donc, la date de création de la session va toujours égaler la date du dernier accès de la session.

    Je vais essayé autre chose, merci comme même.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    AAHHHHHHHHHHHHHHHHHH,

    Maudit browser d'éclipse. C'est lui le problème.
    Je l'ai testé dans le browser de Firefox et tout fonctionne comme je le voulais.

    Et dire que j'ai perdu mon temps pendant des heures pour une connerie.

    Merci pour l'aide comme même.

    Browser d'eclipse de &?#$%

Discussions similaires

  1. [C#] Les variables de sessions
    Par BilTCD dans le forum ASP.NET
    Réponses: 3
    Dernier message: 11/08/2005, 16h01
  2. [EJB2.1 Entity] [BMP] les requetes doivent-elles se trouver directement dans les méthodes ?
    Par webspeak dans le forum Java EE
    Réponses: 2
    Dernier message: 24/03/2005, 09h34
  3. [Interface] Appeller toutes les méthodes héritées d'un class
    Par thibaut.d dans le forum Général Java
    Réponses: 4
    Dernier message: 25/01/2005, 09h42
  4. Utiliser les méthodes des boutons crées en rafale.
    Par kabouns dans le forum Composants
    Réponses: 8
    Dernier message: 03/12/2004, 11h48
  5. Effacer les variables de session
    Par glsn dans le forum ASP
    Réponses: 2
    Dernier message: 12/12/2003, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo