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.
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.
- Application
- Session
- demande
- Page
assurez-vous de les comprendre. Pour plus de regard ici
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.
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}
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