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 :

Pb de session avec ma servlet


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Par défaut Pb de session avec ma servlet
    Bonjour,

    Dans le cadre d'un de mes cours, je suis en train de développer une servlet gérant un panier à provisions.
    Pour l'affichage, j'utilise des pages JSP.

    L'objectif que j'essaye d'atteindre est:
    • Autenthification de l'utilisateur
    • Affichage des objets et de la quantité disponible
    • Choix des objets par l'utilisateur
    • Affichage du panier


    Je crée une session par utilisateur afin d'enregistrer leur choix.

    N'ayant pas de base de données pour l'appli, je crée également une session pour la gestion et l'affichage des quantités. Au démarrage, je charge des valeurs à l'intérieur que je modifie par la suite.

    Je n'arrive pas à faire en sorte que si l'utilisateur1 choisi un article alors la quantité est décrémentée et affichée pour l'utilisateur2 qui arrive juste après.

    Le réel problème vient du fait que quand j'appelle la page de login, je recrée la session quantite du coup l'utilisateur2 ne voit pas le "stock réel".

    Je ne vois pas comment faire pour créer ma session quantite et ne plus l'écraser en suite. Je voudrais faire une sorte de "super session" qui serait créé au démarrage puis plus écraser mais juste modifier.

    Est ce possible?

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Si tu veux une "variable" globale à ton application, utilise la méthode getServletContext() que tu peux appeler à partir d'un objet HttpSession.
    Cette méthode te renvoie un servletContext sur lequel tu peux appeler les méthodes setAttribute, qui fonctionnent comme celles d'une session ou d'une request.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Par défaut
    Merci pour cette réponse rapide,

    Je pense que je n'ai pas été très clair au niveau du fonctionnement des pages.

    Lorsque j'appelle la page de login (1° page de la servlet), je crée la session quantité ainsi que la session utilisateur ensuite je passe à la page de choix des articles.
    Donc à chaque fois que j'appelle cette page de login, j'écrase ma session quantite qui a été crée la 1° fois.

    si je fais ce que tu me dis, à chaque appel de la page de login la variable "globale "va être écrasée non?

    Ci-dessous le code la classe associée à la page de login:
    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
    43
    44
    45
    46
    47
    package com.store.Actions.User;
     
    import java.util.Hashtable;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
     
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
     
    import com.store.forms.userForm;
     
    public class LoginUserAction extends Action{ 
    	@Override
    	public ActionForward execute(ActionMapping arg0, ActionForm arg1, HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
    		//Définition de la session
    		HttpSession session;
    		HttpSession quantite;
    		userForm loginform = (userForm) arg1;
    		if (arg2.getParameter("submituser")!=null)
    		{
    			//Table de hachage pour les quantités
     
    			Hashtable<String, String> qt = new Hashtable<String,String>();
    			qt.put("Tasse USB","10");
    			qt.put("Gants","10");
    			qt.put("Clavier","10");
    			qt.put("Ipod","10");
    			quantite = arg2.getSession(true);
    			quantite.setAttribute("qt", qt);
    			//Codage en dur de l'utilisateur, sachant qu'avec une base de données, ce serai dynamique
    			if((loginform.getUser().getlogin().equals("toto" ) || loginform.getUser().getlogin().equals("toto2" )) && loginform.getUser().getmdp().equals("toto"))
    			{
    				//Création de la session avec le nom d'utilisateur comme attribut
    				session = arg2.getSession(true);
    				session.setAttribute("login",loginform.getUser().getlogin());
    				return arg0.findForward("success");
    			}
    			else
    				return arg0.findForward("failure");
    		}
    		return arg0.findForward("index");	
    	}
    }
    Je sais que la hashtable ne sert pas forcément car je pourrais faire directement des setAttribute() dans la session mais vu qu'on est deux sur le projet je l'ai laissée pour le moment.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Il ne faut pas mettre l'initialisation de tes produits dans la servlet qui gere le login.
    Il faut mettre cette portion de code par exemple, dans une servlet qui ne sera appelée qu'une fois au lancement de ton application.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Par défaut
    ok je vais essayer ça

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Par défaut
    Merci pour ton aide ça marche

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

Discussions similaires

  1. Problème de session avec les JSP/Servlet
    Par FuneralRose dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 02/06/2012, 10h28
  2. Problème session avec les servlet
    Par Didiplouf dans le forum Java EE
    Réponses: 1
    Dernier message: 19/05/2011, 12h50
  3. Interroger les valeur d1 [ javabean ] avec une [ servlet ]
    Par jmeclipse dans le forum Servlets/JSP
    Réponses: 21
    Dernier message: 07/06/2005, 12h14
  4. Création d'une variable de session avec un ID
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 18/10/2004, 10h28
  5. Réponses: 2
    Dernier message: 29/03/2004, 13h44

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