OVH Cloud OVH Cloud

Servlet et session

6 réponses
Avatar
Emmanuel Alliel
Bonjour,

est ce que quelqu'un aurais un petit tutorial ou quelques lignes de code qui
explique comment utiliser une session dans un servlet ?

Merci

6 réponses

Avatar
Alexandre ROMAN
Emmanuel Alliel wrote:

Bonjour,

est ce que quelqu'un aurais un petit tutorial ou quelques lignes de code
qui explique comment utiliser une session dans un servlet ?

Merci


Depuis une servlet, on accède à la session comme ceci :

protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
String msg = "Hello world";

HttpSession session = req.getSession();
session.setAttribute("message", msg);
}

--
Le passé répond de l'avenir.
Devise de la ville de Briançon (05)

Avatar
Emmanuel Alliel
"Alexandre ROMAN" a écrit dans le message de
news:406c4d08$0$12795$
Emmanuel Alliel wrote:

Bonjour,

est ce que quelqu'un aurais un petit tutorial ou quelques lignes de code
qui explique comment utiliser une session dans un servlet ?

Merci


Depuis une servlet, on accède à la session comme ceci :

protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
String msg = "Hello world";

HttpSession session = req.getSession();
session.setAttribute("message", msg);
}


comment je fait pour recuperer plus tard la String message ?


Avatar
JeeP
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
String msg = "";

HttpSession session = req.getSession(true);
msg = (String)session.getAttribute("message");
}

Emmanuel Alliel wrote:
"Alexandre ROMAN" a écrit dans le message de
news:406c4d08$0$12795$

Emmanuel Alliel wrote:


Bonjour,

est ce que quelqu'un aurais un petit tutorial ou quelques lignes de code
qui explique comment utiliser une session dans un servlet ?

Merci


Depuis une servlet, on accède à la session comme ceci :

protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
String msg = "Hello world";

HttpSession session = req.getSession();
session.setAttribute("message", msg);
}



comment je fait pour recuperer plus tard la String message ?






Avatar
Frédéric Augé
un peu de lecture:
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html
Ok, ce n'est pas un "petit" tutorial, mais avec la table des matières,
on s'y retrouve ;-)

plus précisemment:
Chapter 11: Java Servlet Technology
Maintaining Client State


Emmanuel Alliel wrote:

Bonjour,

est ce que quelqu'un aurais un petit tutorial ou quelques lignes de code qui
explique comment utiliser une session dans un servlet ?

Merci




Avatar
Franck Andriano
Bonjour,

toujours avec les sessions...

j'utilise un objet singleton de mapping de session pour voir le contenu
de toutes les sessions utilisateurs, mais il m'arrive de récupérer deux ou x fois
le même objet session !? Ce qui n'ai pas normale...
(j'utilise tomcat comme conteneur de servlet...)

le code :

// objet SessionMonitor
public final class SessionMonitor
{
private static SessionMonitor instance;
private static Hashtable sessions = new Hashtable();

public SessionMonitor() { }

public static synchronized SessionMonitor getInstance()
{
if (instance == null) instance = new SessionMonitor();
return instance;
}

public static synchronized void monitorSession(String a_Id, HttpSession a_session)
{
sessions.put(a_Id, a_session);
}

public static synchronized Hashtable getHashSession()
{
return (Hashtable) sessions;
}
//...
}

// BServletSession
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
HttpSession session = req.getSession();
if (session != null)
{
session.setAttribute("USER", super.USER);

// objet monitor session...
SessionMonitor.monitorSession((String) session.getId(), session);
}
super.service(req, res);
}

Le probléme est ici, il m'arrive de récupérer deux ou x fois le même objet session
en parcourant ma hash !?
Ce qui n'est pas possible normalement, mais... tout arrive! ;-)

// ServletMonitorSession
Hashtable hash = (Hashtable) SessionMonitor.getHashSession();
Enumeration e = hash.keys();
while (e.hasMoreElements())
{
// la clef...
String session_id = (String) e.nextElement();
HttpSession session = null;
try
{
// l'objet associé...
session = (HttpSession) SessionMonitor.getSession(session_id);
System.out.println("session getId :"+session.getId());
System.out.println("session_id :"+session_id);

// test si la session est toujours valide... sinon exception!!!
boolean isnew = session.isNew();
}
catch (Throwable ex)
{
// Session déjà invalider par le serveur de servlet!!!
SessionMonitor.releaseSession(session_id);
session = null;
continue; // suivant!
}

//...
}

Quelqu'un a-t-il une piste ???
Le bug n'est pas bloquant... mais j'aimerai comprendre! :-)

Merci d'avance pour vos réponses,

/Franck Andriano

--
!?
Avatar
Olivier Demaine
"Franck Andriano" a écrit dans le message news:
c4ja8v$ekc$
Bonjour,

toujours avec les sessions...

j'utilise un objet singleton de mapping de session pour voir le contenu
de toutes les sessions utilisateurs, mais il m'arrive de récupérer deux ou
x fois

le même objet session !? Ce qui n'ai pas normale...
(j'utilise tomcat comme conteneur de servlet...)


Bizare comme singleton

le code :

// objet SessionMonitor
public final class SessionMonitor
{
private static SessionMonitor instance;
private static Hashtable sessions = new Hashtable();


pourquoi tu met sessions et les methodes permettant d'y acceder en static ?
dans ce cas le singleton est inutile

public SessionMonitor() { }

public static synchronized SessionMonitor getInstance()
{
if (instance == null) instance = new SessionMonitor();
return instance;
}

public static synchronized void monitorSession(String a_Id, HttpSession
a_session)

{
sessions.put(a_Id, a_session);
}

public static synchronized Hashtable getHashSession()
{
return (Hashtable) sessions;
}
//...
}

// BServletSession
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException

{
HttpSession session = req.getSession();
if (session != null)
{
session.setAttribute("USER", super.USER);

// objet monitor session...



SessionMonitor.getIntance().monitorSession((String) session.getId(),
session);


}
super.service(req, res);
}

Le probléme est ici, il m'arrive de récupérer deux ou x fois le même objet
session

en parcourant ma hash !?
Ce qui n'est pas possible normalement, mais... tout arrive! ;-)

// ServletMonitorSession
Hashtable hash = (Hashtable) SessionMonitor.getHashSession();
Enumeration e = hash.keys();
while (e.hasMoreElements())
{
// la clef...
String session_id = (String) e.nextElement();
HttpSession session = null;
try
{
// l'objet associé...
session = (HttpSession) SessionMonitor.getSession(session_id);
System.out.println("session getId :"+session.getId());
System.out.println("session_id :"+session_id);

// test si la session est toujours valide... sinon exception!!!
boolean isnew = session.isNew();
}
catch (Throwable ex)
{
// Session déjà invalider par le serveur de servlet!!!
SessionMonitor.releaseSession(session_id);
session = null;
continue; // suivant!
}

//...
}

Quelqu'un a-t-il une piste ???
Le bug n'est pas bloquant... mais j'aimerai comprendre! :-)

Merci d'avance pour vos réponses,

/Franck Andriano
Ca va probablement pas resoudre ton problème mais bon.

Olivier