Comment stocker des objets Java dans HttpSession?

donc j'essaie d'obtenir un servlet pour ajouter un objet Java à la session de l'utilisateur, quand ce servlet est demandé. Mais après que le servlet redirige vers la page suivante et que j'ai essayé de récupérer l'objet, j'obtiens un objet null à la place.

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

request.setAttribute("object", obj);

puis j'essaie de le récupérer par (dans le JSP):

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

alors comment pourrais-je obtenir obj pour ne pas être null?

mise à jour: J'ai aussi essayé cela sans rien:

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

avec ce qui suit dans le JSP:

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

retourne toujours nul.

34
demandé sur Tamer 2011-04-23 23:52:50

4 réponses

vous n'ajoutez pas l'objet à la session, vous l'ajoutez plutôt à la requête.

Ce qu'il vous faut, c'est:

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

dans les Servlets vous avez 4 portées où vous pouvez stocker des données.

  1. Application
  2. Session
  3. demande
  4. Page

assurez-vous de les comprendre. Pour plus de regard ici

46
répondu Romain Hippeau 2017-08-18 07:37:42

ajouter à la session , et non à la requête .

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

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

une caractéristique principale de la version 2.0 de JSP technology est son support d'un langage d'expression (EL). Un langage d'expression permet d'accéder facilement 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 à une fève en utilisant une syntaxe simple telle que ${name} pour une variable simple ou ${name.foo.bar} pour une propriété imbriquée.

12
répondu Matt Ball 2011-04-23 19:58:01

Ici, vous pouvez le faire en utilisant HttpRequest ou HttpSession . Et pense que ton problème est dans le JSP.

si vous allez utiliser le servlet intérieur de suivre,

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 request ou session, utilisez following pour y accéder dans le JSP,

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

ou

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

semble ton problème est dans le JSP.

Si vous voulez utiliser les 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}

5
répondu Chathuranga Withana 2011-04-24 15:02:16

l'objet request n'est pas la session.

vous voulez utiliser l'objet session pour stocker. La session est ajoutée à la requête et est où vous voulez persister les données à travers les requêtes. La session peut être obtenue à partir de

HttpSession session = request.getSession(true);

alors vous pouvez utiliser setAttribute ou getAttribute sur la session.

un tutoriel plus à jour sur les sessions jsp est: http://courses.coreservlets.com/Course-Materials/pdf/csajsp2/08-Session-Tracking.pdf

1
répondu ditkin 2011-04-23 20:05:54