2011-04-23 26 views
32

así que estoy tratando de conseguir un servlet para agregar un objeto de Java a la sesión del usuario, cuando se solicita este servlet. Pero después de que el servlet redirecciona a la página siguiente y trato de recuperar el objeto, obtengo un objeto null.¿Cómo se almacenan los objetos Java en HttpSession?

Aquí es lo que hago para agregar el objeto a la HttpSession (en el servlet):

request.setAttribute("object", obj); 

entonces trato de recuperarla (en el JSP):

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

¿cómo conseguiría OBJ para no ser nulo?

Actualización: también he intentado esto con nada:

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

con lo siguiente en el JSP:

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

Ambos aspectos todavía vuelven nula.

+4

Estás configurando HttpRequest. Pero la pregunta dice HttpSession. ¿Cuál estás tratando de hacer? – CoolBeans

+0

También asegúrese de que en la parte superior de su JSP tenga: <% @ page language = "java" session = "true"%> –

+0

¿Está el obj nulo? Encontré algo que no pude obtener ningún objeto para resolver desde request.getSession(), tengo que crear otro objeto de sesión en mi segunda página, y necesitaba hacer session.getAttribute ("object"); en lugar. – meltdownmonk

Respuesta

42

no va a agregar el objeto de la sesión, en lugar de que lo añade a la petición.
Lo que necesita es:

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

En servlets que tienen 4 ámbitos donde puede almacenar datos.

  1. Aplicación
  2. Sesión
  3. Solicitud
  4. Página

asegurarse de que entiende estos. Para más mirada here

+6

y puede obtener la sesión de request.getSession() – MeBigFatGuy

+0

Lo he intentado también pero con el mismo efecto. – Tamer

+1

¿cómo estás tratando de leerlo en el jsp? – MeBigFatGuy

12

añadirlo a la sesión, no a la solicitud.

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

Además, no use scriptlets en el JSP. Use EL en su lugar; para acceder al object todo lo que necesita es ${object}.

Una característica principal de la tecnología JSP versión 2.0 es su compatibilidad con un lenguaje de expresiones (EL). Un lenguaje de expresión hace que sea posible acceder fácilmente a los datos de la aplicación almacenados en los componentes de JavaBeans. Por ejemplo, el lenguaje de expresión JSP permite a un autor de la página para acceder a un bean mediante sintaxis simple como ${name} para una variable simple o ${name.foo.bar} una propiedad anidada.

1

El objeto de la petición no es la sesión.

que desea utilizar el objeto de sesión para almacenar. La sesión se agrega a la solicitud y es si desea persistir los datos entre las solicitudes.La sesión se puede obtener desde

HttpSession session = request.getSession(true); 

Luego puede usar setAttribute o getAttribute en la sesión.

A más hasta la fecha tutorial sobre sesiones JSP es: http://courses.coreservlets.com/Course-Materials/pdf/csajsp2/08-Session-Tracking.pdf

+0

Tengo un problema similar, al usar el EL, puedo acceder a los atributos de la aplicación y los ámbitos de solicitud, pero no el alcance de la sesión. Estoy usando la sintaxis adecuada. – kiwicomb123

5

Aquí puede hacerlo mediante el uso de HttpRequest o HttpSession. Y piensa que tu problema está dentro del JSP.

Si va a utilizar el servlet en el interior do siguiente,

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

o

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

y después de establecer su atributo mediante el uso de la solicitud o de la sesión, el uso siguiente para acceder a ella en el JSP ,

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

o

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

Parece que su problema está en el JSP.

Si desea utilizar scriptles debe ser como sigue,

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

O puede utilizar expresiones como sigue,

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

o se puede usar EL de la siguiente manera, ${object} o ${sessionScope.object}

Cuestiones relacionadas