[ RMAN @ 24.06.2010. 23:12 ] @
Napravio sam jedan projekat koji radi super ali za jednog korisnika :)

E sada problem nastaje kada se uloguju 2 ili vise korisnika na sistem. Odnosno kada se korisnik uloguje stavljam u sesiju objekat tog korisnika(jmbg,ime,prezime....). Medjutim kada se uloguje drugi korisnik ja onda preko tog objekta u sesiji upisujem drugi tako da mi se informacije o prvom gube...

Kako se ovo uopste resava?

Pretpostavljam da su za to zaduzeni cookies ali meni nesto ne radi kako treba. Mozda ne pozivam servlete kako treba.

[Ovu poruku je menjao RMAN dana 25.06.2010. u 00:29 GMT+1]
[ del-boy @ 25.06.2010. 00:07 ] @
Ako si ga stavio na sesiju treba da bude vezan samo za jednog korisnika (tomcat - pretpostavljam da njega koristiš ili neki sličan server - sam vodi računa o postavljanju cookie-a). Moguće je da si stavio taj objekat u application scope, a ne u session scope, pa da je vezan za celu aplikaciju, a ne za korisnika...

Postavi deo koda gde postavljaš taj objekat.
[ MMX @ 25.06.2010. 08:41 ] @
Kao što kolega reče, najbolje da postaviš kod pa da vidimo u čemu je problem i da proverimo da li si sve uradio kako treba. Pretpostavljam da testiranje vršiš tako što otvoriš novi tab u Firefoxu pa u njemu loguješ drugog korisnika? Problem je u tome što tabovi u Firefoxu dele istu sesiju, dok u Internet Exploreru to nije slučaj. Najbolje bi bilo da testiranje vršiš sa dva browsera.
[ RMAN @ 29.06.2010. 09:38 ] @
Pozdrav!

Izvinjavam se sto nisam ranije odgovorio imao sam problema sa netom.

E, probao sam u dva browsera i radi .
@del-boy Nisam stavio u application scope vec u session
@MMX bio su u pravu, radio sam sa tabovima u firefox-u i tako ne radi, medjutim probao sam i sa tabovima u exploreru i ni tamo ne radi. Ali kada sam probao odvojeno u firefox-u i explorer-u radi super.

Zanima me da li je to u redu ili nije?

Ima dosta koda, pa cu pokusati najbitnije da izdvojim...

Prvo imam pocetno stranicu koja prikazuje spisak svih oglasa u bazi podataka, za prikaz ove stranice mi je zaduzen "WelcomeServlet"
Code:

// inicijalizovanje ulazno-izlaznih tokova za komunikaciju sa serverom (java aplikacija sa kojom se komunicira preko porta 9000)
Socket sock=new.....
ObjectOutputStream out=new.....
ObjectInputStream in=new.....

// neki deo koda ovde
// slanje zahteva serveru da posalje listu oglasa iz baze podataka
// primanje liste oglasa

// stavljanje u sesiju
request.getSession().setAttribute("adsList", adsList);
request.getSession().setAttribute("connectOk", connectOk);     // connectOK je boolean indikator da li je konekcija sa serverom ostvarena
request.getSession().setAttribute("input", input);
request.getSession().setAttribute("output", output);

// redirekcija
response.sendRedirect(response.encodeURL("basic.jsp"));




Sada sam redirektovan na stranicu basic.jsp iz koje citam connectOk i adsList iz sesije iz kreiram html stranicu.
Na njoj se nalaze linkovi za registraciju korisnika i logovanje korisnika (RegisterServlet i CheckLoginServlet respektivno).

Ako neko zeli da se registruje pokrece se RegisterServlet
Code:

// preuzimanje parametara za registraciju sa forme

// neki deo koda ovde

// preuzimanje ulazno-izlaznih tokova iz sesije (prethodno inicijalizovanih u WelcomeServlet-u)
ObjectOutputStream output=(ObjectOutputStream)request.getSession().getAttribute("output");
ObjectInputStream input=(ObjectInputStream)request.getSession().getAttribute("input");

// slanje zahteva serveru da proveri validnost podataka

// ukoliko su podaci validni vrsi se redirekcija
response.sendRedirect(response.encodeURL("registerSuccess.html"));

// ukoliko nisu validni...... neki deo koda ovde



Stranica registerSuccess.html obavestava korisnika da se uspesno registrovao i da sada ide na login stranicu
Znaci imam link na pocetno stranicu i na stranicu za logovanje (kada se klikne na pocetnu stranicu ide se na WelcomeServlet a kada se klikne na stranicu za logovanje ide se na login.jsp)

Ukoliko se ide na stranicu za logovanje "login.jsp" (CheckLoginServlet)
Code:

// preuzimanje ulazno-izlaznih tokova iz sesije
ObjectOutputStream output=(ObjectOutputStream)request.getSession().getAttribute("output");
ObjectInputStream input=(ObjectInputStream)request.getSession().getAttribute("input");

// slanje zahteva serveru da proveri validnost username-a i password-a

// citanje odgovora servera

// ako su podaci validni redirekcija na user.jsp

// ako podaci nisu validni redirekcija ponovo na login.jsp


LogoutServlet - servlet za izlogovanje
Code:

// brisem sve iz sesije i zatvaram ulazno-izlazne tokove sa serverom....



Da li je ovo ok?
I da, jos jedno pitanje da li mogu iz jednog servleta da se redirektujem na drugi servlet? Odnosno, znam da moze al da li je to ok?


[ IgorMedo @ 11.08.2010. 19:06 ] @

I da, jos jedno pitanje da li mogu iz jednog servleta da se redirektujem na drugi servlet? Odnosno, znam da moze al da li je to ok?

Kao sto si i sam primjeti Servlet je standardna Java klasa koja implementira odredjeni interface ili prosiruje neku abstractnu class, sadrzi methode u kojim bi treba od obradis zahtijev.
Vjerovatno prosirujes HttpServlet... ili nesto slicno.
Posto je to standardna klasa vrlo lako mozes kreirati novu klasu tj. servlet i pozvati methodu koju zelis.
Medjutim to i bas nema mnog smisla, jedan servlet treba da obraduje jednu akciju. Skup vise servleta treba da prestavlja kontroler.
Sam kontroler po prirodi ne bi treba da sadrzi poslovnu logiku, logika treba da bude odvojena u servisma, a kontroler treba da ti omoguci povezivanje pogleda (tj. forme) sa servisima.
Na ovaj nacin ces rastaviti Korisnicki interfejs od poslovne logike, samim tim odrzavanje aplikacije ti postaje jednostavnije, ukoliko moras da vrsis izmjene na pogledima ne rizikujes da ces razbiti poslovnu logiku i obratno.

Sve u svemu ja nebih pozivao iz jednog servleta drugi.

Ako ti je potrebna neka obrada prije poziva odradjenih servleta pogledaj filtere vrlo su jednostavni za koristenje i korisni. Npr. ako imas odredjeni dio koda koji ti se mora izvrsiti prije izvrsenje odradjenih servleta.

Pozdrav