Come si memorizzano oggetti Java in HttpSession?

Quindi sto cercando di ottenere un servlet per aggiungere un object Java alla sessione dell’utente, quando viene richiesto questo servlet. Ma dopo che il servlet ha reindirizzato alla pagina successiva e provo a recuperare l’object, ottengo invece un object null .

Ecco cosa faccio per aggiungere l’object a HttpSession (nel servlet):

 request.setAttribute("object", obj); 

Quindi provo a recuperarlo tramite (nella JSP):

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

Quindi, come potrei ottenere obj per non essere nullo?

Aggiornamento: ho anche provato questo con niente:

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

con quanto segue in JSP:

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

Entrambi i modi restituiscono ancora null.

Non stai aggiungendo l’object alla sessione, ma lo stai aggiungendo alla richiesta.
Quello di cui hai bisogno è:

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

In Servlet hai 4 ambiti in cui è ansible memorizzare i dati.

  1. Applicazione
  2. Sessione
  3. Richiesta
  4. Pagina

Assicurati di aver capito questi. Per ulteriori informazioni qui

Aggiungilo alla sessione , non alla richiesta .

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

Inoltre, non utilizzare scriptlet nel JSP. Usa invece EL ; per accedere object tutto ciò di cui hai bisogno è ${object} .

Una caratteristica principale della tecnologia JSP versione 2.0 è il suo supporto per un linguaggio di espressione (EL). Un linguaggio di espressione consente di accedere facilmente ai dati dell’applicazione memorizzati nei componenti JavaBeans. Ad esempio, il linguaggio di espressione JSP consente all’autore della pagina di accedere a un bean utilizzando una syntax semplice come ${name} per una variabile semplice o ${name.foo.bar} per una proprietà nidificata.

Qui puoi farlo usando HttpRequest o HttpSession . E pensa che il tuo problema sia all’interno del JSP.

Se vuoi usare la servlet interna, segui,

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

o

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

e dopo aver impostato l’attributo utilizzando la richiesta o la sessione, utilizzare in seguito per accedervi nella JSP,

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

o

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

Quindi sembra che il tuo problema sia nel JSP.

Se vuoi usare gli scriptlet dovrebbe essere come segue,

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

Oppure puoi usare espressioni come segue,

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

o può usare EL come segue, ${object} o ${sessionScope.object}

L’object richiesta non è la sessione.

Si desidera utilizzare l’object sessione da memorizzare. La sessione viene aggiunta alla richiesta ed era se si desidera mantenere i dati tra le richieste. La sessione può essere ottenuta da

 HttpSession session = request.getSession(true); 

Quindi è ansible utilizzare setAttribute o getAttribute nella sessione.

Un tutorial più aggiornato sulle sessioni di jsp è: http://courses.coreservlets.com/Course-Materials/pdf/csajsp2/08-Session-Tracking.pdf