2010-09-20 7 views
5

Potrzebuję napisać małą klasę Java, która umożliwi mi dodawanie i odczytywanie z bieżącej sesji użytkownika.Jak uzyskać dostęp do sesji z klasy Java

Wszystko, co widzę, odnosi się do Servletów, ale chciałbym po prostu użyć zwykłej starej klasy.

Czy ktoś może pomóc nowemu Java Newbie?

Dzięki

Odpowiedz

1

Tak, po prostu przekazać HttpRequest do klasy z serwletu.

W swojej serwletu zrobić coś takiego,

cmd.execute(request); 

W swojej klasie zrobić coś takiego,

public class Command implements ICommand { 
    . 
    . 
    public void execute(HttpServletRequest request){ 
     HttpSession sess = request.getSession(false); 
    } 
    . 
    . 
    . 
} 
+0

Powodem, dla którego nie chcę używać serwletu, jest to, że nie wiem, jak z nich korzystać, dlatego chce tylko klasy. Jeśli możesz podać przykładowy kod ... – griegs

+2

Och! w porządku. co robisz? Chodzi mi o to, jaki rodzaj aplikacji próbujesz opracować. –

+0

Próbuję stworzyć aplikację internetową i chcę mieć scentralizowane miejsce do zarządzania moją sesją. Myślałem, że coupld po prostu zaimportować bibliotekę, aby uzyskać dostęp do sesji, ale teraz myślę, że muszę przekazać httpsession do mojej klasy – griegs

2

Ogólna koncepcja „Session” to tak naprawdę tylko do przechowywania danych przez interakcja między klientem HTTP a serwerem. Zarządzanie sesjami jest automatycznie obsługiwane przez wszystkie serwlety HTTP. Jakie ramy?

Jeśli chcesz tylko przechowywać informacje o aplikacji konsolowej, aby zapamiętać informacje między przebiegami, rozważ użycie Xml do zapisania/załadowania danych z pliku.

+1

Wiem, co to jest sesja. To, czego chcę, to możliwość wywoływania klasy z mojej strony jsp oraz czytania i pisania do sesji. – griegs

+0

Och, jeśli chcesz uzyskać dostęp do sesji z JSP, która jest tak prosta, jak coś takiego: session.setAttribute ("test", "wartość") ;. Spójrz na http://www.jsptut.com/Sessions.jsp –

+1

sesja jest automatycznie ustawiana jako zmienna na stronie JSP, tak jak żądanie. –

1

Użyj opartego na komponentach szkieletu MVC, który usuwa wszystkie nieprzyjemne szczegóły interfejsu API Servleta, dzięki czemu uzyskasz zerowy import o wartości javax.servlet. Przykładami są JSF2 i Struts2.

W JSF2 na przykład, że po prostu zadeklarować User klasy jako sesji udało lunetą fasola:

@ManagedBean 
@SessionScoped 
public class User { 
    // ... 
} 

Następnie w „działanie” fasoli, które używasz do przetwarzania forma przedstawienia, odwoływać jako zarządzana usługa:

@ManagedBean 
@RequestScoped 
public class SomeFormBean { 

    @ManagedProperty(value="#{user}") 
    private User user; 

    public void submit() { 
     SomeData someData = user.getSomeData(); 
     // ... 
    } 
} 

To wszystko.

Jeśli chcesz trzymać się surowego API Servlet, musisz żyć z tym, że musisz przekazać surowym obiektom HttpServletRequest/HttpServletResponse. Najlepsze, co możesz zrobić, to homegrow some abstraction wokół (ale wtedy kończysz jak to, co JSF2/Struts2 już robisz, więc dlaczego miałbyś homegrów - bez względu na hobby/samokształcenie)).

0

Ogólnie, jak wspomniano w innych odpowiedziach, sesja na wiele sposobów działa jak sklep. Aby wejść w interakcję z sesją z innej klasy, która znajduje się poza strukturą Servlet/JSP, należy uzyskać odniesienie do danej sesji. Można go osiągnąć na kilka sposobów:

1) Przekazywanie sesji jako część parametru metody (wspomniana już w innych odpowiedziach) 2) Powiązanie sesji z lokalną zmienną wątku z bieżącym uruchomieniem wątku (refer ThreadLocal). Ta metoda ma tę zaletę, że nie deklaruje określonych parametrów w sygnaturze metody klasy, która musi korzystać z sesji. Ponadto, jeśli wątek wywołujący przechodzi przez bibliotekę, a następnie ponownie wywołuje określoną klasę, np. Servlet-> YourClass0 -> Apache Some Library -> YourClass1, sesja będzie również dostępna dla YourClass1.

Jednak wątek lokalny również musi zostać wyczyszczony, gdy wątek wykonawczy wróci przez początkowy komponent (na przykład serwlet), w przeciwnym razie z pewnością mogą wystąpić przecieki pamięci.

Ponadto należy zapoznać się z konkretnymi ramami obsługi sesji, powyższy mechanizm działa poprawnie w Tomcat.