web-dev-qa-db-fra.com

Comment stockez-vous les objets Java dans HttpSession?

J'essaie donc de faire en sorte qu'un servlet ajoute un objet Java à la session de l'utilisateur, lorsque ce servlet est demandé. Mais ensuite, le servlet redirige vers la page suivante et j'essaie de récupérer objet, je reçois plutôt un objet null.

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

request.setAttribute("object", obj);

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

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

Alors, comment pourrais-je obtenir pour ne pas être nul?

Mise à jour: j'ai aussi essayé cela avec rien:

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

avec ce qui suit dans le JSP:

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

Les deux manières retournent toujours null.

34
Tamer

Vous n’ajoutez pas l’objet à la session, mais vous l’ajoutez à la demande.
Ce dont vous avez besoin est:

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

Dans Servlets, vous avez 4 portées où vous pouvez stocker des données.

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

Assurez-vous de bien les comprendre. Pour plus de look ici

46
Romain Hippeau

Ajoutez-le à la session et non à la demande .

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

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

L'une des principales caractéristiques de la technologie JSP version 2.0 est la 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.

12
Matt Ball

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

Si vous souhaitez utiliser la servlet interne, procédez comme 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 à l'aide de request ou de session, utilisez les options suivantes pour y accéder dans le fichier JSP,

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

ou

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

Il semble donc que votre problème se trouve dans le JSP.

Si vous souhaitez utiliser des scriptlets, procédez 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

L'objet de demande n'est pas la session.

Vous souhaitez utiliser l'objet de session à stocker. La session est ajoutée à la demande et vous souhaitez conserver les données entre les demandes. La session peut être obtenue auprès de

HttpSession session = request.getSession(true);

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

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

1
ditkin