webForumDet fria alternativet

session

6 svar · 479 visningar · startad av fredrik1

fredrik1Medlem sedan aug. 2002190 inlägg
#1

Hej!
Jag har två st jsp sidor.
Jag vill föra över ett värde från den första sidan till den andra via sessions.
Hur gör jag då?
Skall jag börja med att starta en session på första sidan och sedan plocka upp det på andra sidan?
Svara gärna med någon typ av kodexempel!

LimeMedlem sedan sep. 2001837 inlägg
#2

fredrik1 skrev:

Hej!
Jag har två st jsp sidor.
Jag vill föra över ett värde från den första sidan till den andra via sessions.
Hur gör jag då?
Skall jag börja med att starta en session på första sidan och sedan plocka upp det på andra sidan?
Svara gärna med någon typ av kodexempel!

När du gör ett jsp-anrop skapas automatiskt ett antal olika objekt automatiskt. De är bl.a. HttpServletRequest request, HttpServletResponce responce och HttpSession session.

Det är den sista du skall använda dig av.

För att sätta ett värde i sessionen använder man sig av session.setAttribute(String key, Object value) t.ex. session.setAttribute("userId","Lime").

När du sedan på en annan sida vill läsa detta värde skall du använda dig av session.getAttribute(String key) alltså (String) session.getAttribute("userId"). Notera att getAttribute returnerar ett Object som du måste typecasta.

I sessionsobjektet bör man bara ha med data som är litet, alltså små textsträngar och liknande som kan vara bra att ha för beteendet på siten.

Om det är många värden som hänger ihop eller du ska samla på dig värden från flera inmatningar för att t.ex. skicka till en server så föredrar jag att använda mig av en Böna (Bean).

En böna är en klass som innehåller ett antal attribut och publica get och set-metoder för alla dessa attribut. Du kan läsa mer om bönor på t.ex. http://javaalmanac.com/egs/javax.servlet.jsp/usebean.jsp.html och http://java.sun.com/j2ee/1.4/docs/tutorial-update2/doc/JSPIntro8.html

och för att se hur man kan använda bönor och formulär http://javaalmanac.com/egs/javax.servlet.jsp/myform.jsp.html.

fredrik1Medlem sedan aug. 2002190 inlägg
#3

servlet session

Hej.
Tack för ditt svar det löste sig för mig med jsp och session!
Men jag har stött på ett annat problem när jag skriver servlets och skall använda en session så skriver jag som jag gjorde i jsp:

String s = (String) session.getValue("text");

Där inehållet skall lagras i Strängen s, men när jag kompilerar så tycker java att den inte känner igen session som en variabel.
Har jag missat någon import då, för jag har kollat upp syntaxen på suns api och vad jag tycker så är det korrekt syntax, mina importer är följande:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

LimeMedlem sedan sep. 2001837 inlägg
#4

fredrik1 skrev:

Hej.
Tack för ditt svar det löste sig för mig med jsp och session!
Men jag har stött på ett annat problem när jag skriver servlets och skall använda en session så skriver jag som jag gjorde i jsp:

String s = (String) session.getValue("text");

Där inehållet skall lagras i Strängen s, men när jag kompilerar så tycker java att den inte känner igen session som en variabel.
Har jag missat någon import då, för jag har kollat upp syntaxen på suns api och vad jag tycker så är det korrekt syntax, mina importer är följande:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

Det är helt korrekt att det blir så.

En jsp-sida är en "wrapper" där man har möjlighet att använda html på ett enklare sätt än att använda out.writeLine(String text) i en servlet. När du kör en jsp-sida i en J2EE-motor, som t.ex. Tomcat, så översätts den till en Servlet. Det översättaren då gör är att skapa de olika attributen på sidan.

När man skriver en egen servlet så måste man hämta sessionsobjektet själv.

Den får man från HttpServletRequest.getSession().

En servlet måste implementera metoderna:
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponce httpServletResponce)

och

protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponce httpServletResponce)

så i någon av dessa metoder så gör man HttpSession session = httpServletRequest.getSession();

fredrik1Medlem sedan aug. 2002190 inlägg
#5

Tack för ditt snabba svar Lime!
Jag har lyckat få detta fungera mellan 2st servlet sidor men jag har stött på ett annan problem.
Om jag vill använda session för att spara värden från fält så att när jag går ifrån sidan och sedan anropar den igen så vill jag ha värderna i fälten synliga, så här har jag gjort:

HttpSession session;

Och i min metod:
session = req.getSession();
String user = req.getParameter("user");
if(user == null) user = (String) session.getAttribute("user");
else {
session.putValue("text", user);
}

Det jag vill åstakomma är om fältet är tomt så hämta värde annars om fältet inte är tomt så spara värdet i en session variabel.
Det jag får när jag gör detta är null fast jag har fyllt i värdet.

jmeMedlem sedan maj 20011 967 inlägg
#6

hmm, jag brukar köra med session.setAttribute("xxxx", "yyy");

finns session.putValue()?

LimeMedlem sedan sep. 2001837 inlägg
#7

jme skrev:

hmm, jag brukar köra med session.setAttribute("xxxx", "yyy");

finns session.putValue()?

Jo, den "finns" men är deprikerad.

putValue
public void putValue(java.lang.String name,
java.lang.Object value)Deprecated. As of Version 2.2, this method is replaced by setAttribute(java.lang.String, java.lang.Object)

Parameters:
name - the name to which the object is bound; cannot be null
value - the object to be bound; cannot be null
Throws:
IllegalStateException - if this method is called on an invalidated session

Genererad på 374 ms · cache AV · v20260730165559-full.f96bc7eb