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

Struts 1 Java Discussion :

[struts] invalidation de session


Sujet :

Struts 1 Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 23
    Points
    23
    Par défaut [struts] invalidation de session
    Bonjour,

    je développe une application pour une bibliothèque en struts.

    Sur chacune de mes pages JSP, je vérifie si ma session est toujours valable en regardant si la variable repésentant l'utilisateur en cours est bien initialisée, si ce n'est pas le cas, je redirige l'utilisateur vers la page de connexion.

    Je précise que j'ai définie une durée de session de 30 minutes dans mon web.xml.

    Le site internet permet à un utilisateur de commander des ouvrages à la bibliothèque. L'utilisateur peut aussi consulter les différentes commandes qu'il a effectués (en utilisant des flèches genre lecteur de cd).

    Lorsque l'utilisateur navigue à l'aide des flèches sur les informations de ces différentes commandes , il peut aussi soit imprimer le détail de la commande soit l'exporter sous forme de fichier texte pour l'importer dans un logiciel de gestion bibliographique.

    Une fois que le fichier est exporté, je réduis la fenètre du navigateur pour passer sur le logiciel de gestion bibliographique et importer le fichier texte. Une fois cela fait je repasse sur la page jsp pour continuer à naviguer sur mes commandes et ma session est soudain invalidée car je suis redirigé sur ma page de connexion.

    J'ai donc effacé le code responsable de l'exportation et cela a fonctionné, j'ai testé avec le code de l'exportation mais sans réduire le fenètre et cela fonctionne aussi.

    voici le code de l'action chargé de l'exportation :

    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
     
    URI lURI = new URI(ExporterAction.class.getResource(mContextManager.getExportRelativePath()).toExternalForm());
    File lFile = new File(lURI);
     
    FileInputStream lFileInputStream = new FileInputStream(lFile);
    OutputStream lOutputStream = aResponse.getOutputStream();
     
    aResponse.setContentType("text");
    aResponse.setHeader("Content-Disposition", "attachment; filename=\"" + "export.txt" + "\";");
    aResponse.setContentLength(lFileInputStream.available());
     
    int lIBufSize = lFileInputStream.available();
    byte lInBuf[] = new byte[lIBufSize];
    int lINumRead;
    while ((lINumRead = lFileInputStream.read(lInBuf, 0, lIBufSize)) > 0) {
            lOutputStream.write(lInBuf, 0, lINumRead);
    }
     
    lFileInputStream.close();
    lOutputStream.close();
     
    return aMapping.findForward("demande");
    Si quelqu'un a déjà eu ce genre de problème, cela m'aiderait au moins à comprendre ce qui se passe.

    Merci d'avance

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Ne serais-ce pas cette ligne qui serais en erreur ?
    l'outputStream de l'objet Response ne doit être ni ouvert ni fermé.
    Celà doit mettre en vrac ton struts je pense.
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Merci beaucoup, je teste cela de suite;

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Voici l'erreur que j'obtient si re retire la ligne cité plus haut :

    java.lang.IllegalStateException: "getOutputStream()" a déjà été appelé pour cette réponse

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Oui, si tu ecrit explicitement dans le getOutputStream, tu doit être le seul !

    Typiquement, une requete ne peu pas retourner 2 images ou 2 pages !
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Comment puis je faire alors , car le fichier que j'exporte est généré à la volée par une autre action.

    Donc, à chaque fois que je fais l'export il est donc différent.

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    dans ce cas là, c'est là qu'il faut voir comment rendre la main au browser et surtout, ne pas rediriger vers une page jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return aMapping.findForward("demande");
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Je peux toujours mettre un return null, car la redirection ne sert plus.

    Je vais tester.

    Merci beaucoup.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    En mettant return null, et en virant la ligne je n'ai plus l'exception mais le premier problème se repose.

    On verra bien.

    Je me repencherai dessus plus tard, car j'ai d'autre bugs.

    Merci tout de même et si quelqu'un peut entrevoir une solution, il (elle) est la bienvenue.

    Merci

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Perso, si j'avais un transfert de fichier a faire serveur->client, je le ferais dans un servlet à part et non dans une classe d'action.
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Je crois que je vais faire cela.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Je viens de tester avec une servlet et c'est toujours la même chose.

    Y a t'il a quelquechose à spécifier dans la servlet ou dans la déclaration de cette servlet dans le web.xml que a préciser , un peu comme le scope que l'on utilise pour les actions struts ?

    Merci d'avance.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Je viens de rajouter des listener, (ServletContextAttributeListener,HttpSessionAttributeListener,HttpSessionListener,ServletContextListener) dans mon application.

    Grace aux listener, j'ai écrit un fichier de log. Et quand je touche à ma servlet, le context est détruit, puis recréée et une nouvelle session aussi. Il est donc logique que la page de connexion m'arrive aussitôt.

    Quelqu'un serait il quelles sont les raisons de destruction du context (à part la modification du code source des servlets ou jsp durant l'execution de tomcat .)

    Merci

  14. #14
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Perso, jamais entendu parlé de destruction de servlet... dsl...
    Il faudrais voir le cas in-situ je pense !
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    L'interface ServletContextListener contient 2 déclarations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void contextInitialized(ServletContextEvent event)
     
    public void contextDestroyed(ServletContextEvent event)
    elles permettent de savoir quand le context est initialisé ou quand il est détruit. Je n'ai pas parlé de la destruction de servlet mais juste que c'était lorsque j'utilise ma servlet que le context est détruit.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Je viens de comprendre, c'est le fait que je regénére le même fichier qui modifie mon context et donc recré une session.

    N'y a t'il aucun moyen de générer un fichier sans ces désagréments.

    merci

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Bon je viens de trouver une pseudo solution,

    Donc j'ai abandonné la création du fichier et je l'ai créé en mémoire à l'aide d'un StringBuffer contenant son contenu.

    Je vais marqué le problème comme résolu.

    Par contre si quelqu'un à déjà eu le même problème ou a trouvé une autre solution, je suis preneur, soit sur le topic ou s'il n'est plus possible d'écrire une fois que c'est marqué en tant que résolu par message privé.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/09/2006, 08h57
  2. [JSP][Struts]Moniteur de sessions
    Par JohnBlatt dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 08/03/2006, 17h13
  3. [Hibernate][Struts] Fermeture des session hibernate
    Par osopardo dans le forum Hibernate
    Réponses: 2
    Dernier message: 22/08/2005, 17h30
  4. [Struts] Gestion de session
    Par Nuncyco dans le forum Struts 1
    Réponses: 3
    Dernier message: 24/06/2004, 11h11
  5. [JSP] probleme d'invalidation de session
    Par Jovial dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 04/06/2004, 15h27

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