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

Java EE Discussion :

Problème session avec les servlet


Sujet :

Java EE

Vue hybride

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Par défaut Problème session avec les servlet
    Bonjour,

    J'ai un problème avec une de mes applications J2EE.

    Pour faire court et exposer mon problème dans un contexte plus clair, j'ai une structure qui comprend:
    • Une applet java qui permet à un utilisateur de rentrer son login et mot de passe et de lancer une authentification
    • Deux servlets : une de connection et de deconnection. Ces deux servlets instancient un ejb qui permet d'effectuer une requête en BDD pour vérifier les logins utilisateur
    • des EJB pour diverses taches notamment la validation de connection et de déconnection


    Lorsque cet utilisateur clique sur le bouton authentifier, la servlet de connection est appellé :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    package servletSpectacle;
     
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.util.Properties;
     
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.rmi.PortableRemoteObject;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
     
    import myEJB.facade;
    import myEJB.facadeHome;
    import util.Formulaire;
    import util.Info_connection;
     
    @SuppressWarnings("serial")
    public class servletConnection extends HttpServlet {
    	// Initialisation de l'EJB facade
    	static Context ctx = null;
     
    	static facadeHome home = null;
     
    	Formulaire form_connection;
     
    	String login, motDePasse, resultat_connection;
     
    	int id_utilisateur;
     
    	Info_connection info_connect;
     
    	@Override
    	protected void doPost(HttpServletRequest request,
    			HttpServletResponse response) throws ServletException, IOException {
    		// Initialisation de la session
    		HttpSession session_spectacle = request.getSession(true);
    		System.out.println(session_spectacle.getId());
    		// Get InitialContext
    		try {
    			ctx = getInitialContext();
    		} catch (NamingException e) {
    			e.printStackTrace();
    			System.exit(2);
    		}
    		// Fin du Get InitialContext
     
    		// Création du Bean Facade
    		String bName = "facadeHome";
    		try {
    			home = (facadeHome) PortableRemoteObject.narrow(ctx.lookup(bName),
    					facadeHome.class);
    			facade bean = home.create();
    			// Initialisation flux entrée
    			ObjectInputStream entree = new ObjectInputStream(request
    					.getInputStream());
    			// Récupération des données de l'Applet : entree.readObject()
    			form_connection = (Formulaire) entree.readObject();
    			// Dispatching des données du formulaire
    			login = form_connection.getLogin();
    			motDePasse = form_connection.getMotDePasse();
     
    			// Exécution de la requette de connection
    			resultat_connection = bean.connection(login, motDePasse);
    			id_utilisateur = bean.getIdClient();
    			info_connect = new Info_connection(id_utilisateur,
    					resultat_connection);
     
    			// On cree une variable de session avec l'ID utilisateur pour les
    			// futurs opérations
    			session_spectacle.setAttribute("id_user", id_utilisateur);
    			System.out.println("Connection.. : "
    					+ session_spectacle.getAttribute("id_user"));
    			// Préparation du flux de sortie
    			ObjectOutputStream sortie = new ObjectOutputStream(response
    					.getOutputStream());
     
    			// Envoie des données de sortie : sortie.writeObject();
    			sortie.writeObject(info_connect);
    		} catch (Exception e) {
    			e.printStackTrace();
    			System.exit(2);
    		}
    	}
     
    	static private Context getInitialContext() throws NamingException {
    		String url = "rmi://localhost:1099";
     
    		try {
    			// Get an InitialContext
    			Properties h = new Properties();
    			h
    					.put(Context.INITIAL_CONTEXT_FACTORY,
    							"org.objectweb.carol.jndi.spi.MultiOrbInitialContextFactory");
    			h.put(Context.PROVIDER_URL, url);
    			return new InitialContext(h);
    		} catch (NamingException ne) {
    			ne.printStackTrace();
    			throw ne;
    		}
    	}
    }
    Cette servlet fonctionne correctement.

    Lorsque l'utilisateur veut se déconnecter il appuie sur un bouton "deconnection" et à ce moment, la servlet de deconnection est appellé :

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    package servletSpectacle;
     
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.util.Properties;
     
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.rmi.PortableRemoteObject;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
     
    import util.Info_connection;
     
    import myEJB.facade;
    import myEJB.facadeHome;
     
    public class servletDeconnection extends HttpServlet {
    	static Context ctx = null;
     
    	static facadeHome home = null;
     
    	static Info_connection info_deco;
     
    	@Override
    	protected void doPost(HttpServletRequest request,
    			HttpServletResponse response) throws ServletException, IOException {
     
    		// Initialisation de la session
    		HttpSession session_spectacle = request.getSession(true);
    		System.out.println(session_spectacle.getId());
    		// Get InitialContext
    		try {
    			ctx = getInitialContext();
    		} catch (NamingException e) {
    			e.printStackTrace();
    			System.exit(2);
    		}
    		// Fin du Get InitialContext
     
    		String bName = "facadeHome";
    		try {
    			home = (facadeHome) PortableRemoteObject.narrow(ctx.lookup(bName),
    					facadeHome.class);
    			facade bean = home.create();
    			// Initialisation flux entrée
    			ObjectInputStream entree = new ObjectInputStream(request
    					.getInputStream());
    			// Récupération des données de l'Applet : entree.readObject()
    			info_deco = (Info_connection) entree.readObject();
    			// Lancement de la deconnection au niveau de l'EJB
    			bean.deconnection();
    			System.out.println("Deconnection... : "
    					+ session_spectacle.getAttribute("id_user"));
    			// Destruction de la session
    			session_spectacle.invalidate();
    			// Préparation du flux de sortie
    			ObjectOutputStream sortie = new ObjectOutputStream(response
    					.getOutputStream());
     
    			// Envoie des données de sortie : sortie.writeObject();
    			info_deco.setId_user(0);
    			info_deco.setResultat_connection("Deconnection reussie");
    			sortie.writeObject(info_deco);
    		} catch (Exception e) {
    			e.printStackTrace();
    			System.exit(2);
    		}
    	}
     
    	static private Context getInitialContext() throws NamingException {
    		String url = "rmi://localhost:1099";
     
    		try {
    			// Get an InitialContext
    			Properties h = new Properties();
    			h
    					.put(Context.INITIAL_CONTEXT_FACTORY,
    							"org.objectweb.carol.jndi.spi.MultiOrbInitialContextFactory");
    			h.put(Context.PROVIDER_URL, url);
    			return new InitialContext(h);
    		} catch (NamingException ne) {
    			ne.printStackTrace();
    			throw ne;
    		}
    	}
    }
    Mon but ici est d'utiliser une variable de session pour tracer l'utilisaeur durant toute sa présence sur l'applet java.

    Mon problème est que ma session n'est pas "sauvegardé" entre les différentes servlet...Les deux sessions obtenue sur les deux servlet lors d'une même utilisation de l'applet sont différentes.

    Que dois-je faire pour que ma session à chaque appel d'une servlet, soit la même ?

    J'ai passé ma journée à chercher un peut partout sur le web sans grand succès, j'ai vu plusieurs réponses qui n'ont pas résolu mon problème. Des que j'effectue un request.getSession(true); ou même, request.getSession(); j'obtient une nouvelle session, malgré qu'au préalable une session a déjà été instancier par une autre servlet.

    Y'a t'il quelque chose à mettre dans l'applet pour conserver les sessions ?, dois'je passer en paramètre quelque chose pour que ma servlet reçoive la session ?

    Je vous remercie du temps que vous prendrez pour m'aider, ce point est très important dans mon projet, et il ne me reste que ce point a résoudre.

    Si vous avez besoin de plus d'informations, n'hésitez pas.

    Cordialement,

    David D.

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Par défaut
    salut

    quelle protocole de communication utilises-tu pour dialoguer avec les servlets? Afin que la session soit conservee entre l'appet et la servlet il faut utiliser le protocole HTTP.
    la classe HttpUrlConnection permet d'établir ce type de communication.

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 de SESSION avec les "pseudo-frame" PHP
    Par kergad dans le forum Langage
    Réponses: 10
    Dernier message: 24/05/2008, 01h12
  3. Problème avec les servlets sous eclipse
    Par supertoms dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 03/03/2007, 19h07
  4. problème PHP avec les sessions
    Par soufian2290 dans le forum Langage
    Réponses: 2
    Dernier message: 24/01/2007, 18h00
  5. [SQL QUERY] Problème avec les servlet plutôt qu'avec SQL
    Par Battosaiii dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 11/04/2006, 01h08

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