2011-04-23 2 views
32

Donc j'essaye d'obtenir une servlet pour ajouter un objet Java à la session de l'utilisateur, quand cette servlet est demandée. Mais après que le servlet redirige vers la page suivante et que j'essaie de récupérer l'objet, j'obtiens un objet null à la place.Comment stockez-vous des objets Java dans HttpSession?

Voici ce que je fais pour ajouter l'objet à la HttpSession (dans le servlet):

request.setAttribute("object", obj); 

Ensuite, j'essaie de le récupérer par (dans la JSP):

Object obj = request.getAttribute("object"); 

Alors comment devrais-je obj pour ne pas être nul?

Mise à jour: J'ai aussi essayé avec rien:

HttpSession session = request.getSession(); 
session.setAttribute("object", obj); 

avec ce qui suit dans la JSP:

Object obj = request.getSession().getAttribute("object"); 

Les deux méthodes retournent toujours nulle.

+4

Vous définissez HttpRequest. Mais la question dit HttpSession. Lequel essayez-vous de faire? – CoolBeans

+0

Assurez-vous également qu'en haut de votre JSP, vous avez: <% @ page language = "java" session = "true"%> –

+0

L'obj est-il nul? J'ai trouvé quelque chose que je ne pouvais pas obtenir d'objets à résoudre à partir de request.getSession(), je devais créer un autre objet de session sur ma deuxième page, et j'avais besoin de faire session.getAttribute ("object"); au lieu. – meltdownmonk

Répondre

42

Vous n'ajoutez pas l'objet à la session, mais vous l'ajoutez à la demande.
Qu'est-ce que vous avez besoin est:

HttpSession session = request.getSession(); 
session.setAttribute("MySessionVariable", param); 

Dans Servlets vous avez 4 champs d'application où vous pouvez stocker des données.

  1. application
  2. session
  3. Demande
  4. page

Assurez-vous que vous comprenez ces. Pour plus d'apparence here

+6

et vous pouvez obtenir la session de request.getSession() – MeBigFatGuy

+0

J'ai essayé cela aussi mais avec le même effet. – Tamer

+1

comment essayez-vous de le lire dans le jsp? – MeBigFatGuy

12

Ajouter à la session , non à la demande .

HttpSession session = request.getSession(); 
session.setAttribute("object", object); 

De même, n'utilisez pas de scriptlets dans la JSP. Utilisez EL à la place; pour accéder object tout ce dont vous avez besoin est ${object}.

Une caractéristique principale de la technologie JSP version 2.0 est sa prise en charge d'un langage d'expression (EL). Un langage d'expression permet d'accéder facilement aux données d'application stockées dans les composants JavaBeans. Par exemple, le langage d'expression JSP permet à un auteur de page d'accéder à un bean en utilisant une syntaxe simple telle que ${name} pour une variable simple ou ${name.foo.bar} pour une propriété imbriquée.

1

L'objet de requête n'est pas la session.

Vous souhaitez utiliser l'objet de session pour stocker. La session est ajoutée à la demande et vous souhaitiez conserver les données dans les demandes.La session peut être obtenue à partir de

HttpSession session = request.getSession(true); 

Ensuite, vous pouvez utiliser setAttribute ou getAttribute sur la session.

Un plus à tutoriel date des sessions est jsp: http://courses.coreservlets.com/Course-Materials/pdf/csajsp2/08-Session-Tracking.pdf

+0

J'ai un problème similaire, en utilisant l'EL, je peux accéder aux attributs de l'application et des étendues de demande, mais pas à l'étendue de la session. J'utilise la bonne syntaxe. – kiwicomb123

5

Ici vous pouvez le faire en utilisant HttpRequest ou HttpSession. Et pensez que votre problème est dans la JSP.

Si vous allez utiliser le servlet intérieur ne suit,

Object obj = new Object(); 
session.setAttribute("object", obj); 

ou

HttpSession session = request.getSession(); 
Object obj = new Object(); 
session.setAttribute("object", obj); 

et après avoir défini votre attribut en utilisant la demande ou de la session, l'utilisation suivante pour y accéder dans la JSP ,

<%= request.getAttribute("object")%> 

ou

<%= session.getAttribute("object")%> 

Apparemment, votre problème est dans la JSP.

Si vous voulez utiliser scriptlets il devrait être comme suit,

<% 
Object obj = request.getSession().getAttribute("object"); 
out.print(obj); 
%> 

Ou peut utiliser des expressions comme suit,

<%= session.getAttribute("object")%> 

ou peut utiliser EL comme suit, ${object} ou ${sessionScope.object}