2010-09-20 18 views
5

Ho bisogno di scrivere una piccola classe Java che mi consenta di aggiungere e leggere dalla sessione utente corrente.Come accedere alla sessione da una classe Java

Tutto ciò che vedo si riferisce a Servlet, ma preferirei semplicemente utilizzare una semplice vecchia classe.

Qualcuno può aiutare questo principiante Java?

Grazie

risposta

1

Sì, basta passare il HttpRequest alla classe dal servlet.

Nel vostro servlet fare qualcosa di simile,

cmd.execute(request); 

Nella classe fare qualcosa di simile,

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

La ragione per cui non voglio usare un servlet è perché non so come usarli, quindi voglio solo una classe. Se è possibile fornire un codice di esempio che ... – griegs

+2

Oh! va bene. cosa stai facendo fino ad allora? Voglio dire che tipo di applicazione stai cercando di sviluppare. –

+0

Cercando di sviluppare un'applicazione web e voglio un posto centralizzato per gestire la mia sessione. Ho pensato che ho semplicemente importato una libreria per accedere alla sessione, ma ora penso di dover passare l'httpsession alla mia classe – griegs

2

Il concetto generale di una "sessione" è in realtà solo un deposito di dati per un interazione tra un client HTTP e un server. La gestione delle sessioni viene gestita automaticamente da tutti i servlet HTTP. Quale quadro?

Se si desidera memorizzare le informazioni per un'app console per ricordare le informazioni tra le esecuzioni, considerare l'utilizzo di Xml per salvare/caricare i dati da un file.

+1

So cos'è una sessione. Quello che voglio è la possibilità di chiamare una classe dalla mia pagina jsp e leggere e scrivere nella sessione. – griegs

+0

Oh se vuoi accedere alla sessione da JSP è semplice come qualcosa di simile: session.setAttribute ("test", "value") ;. Date un'occhiata alla http://www.jsptut.com/Sessions.jsp –

+1

la sessione viene automaticamente impostata come una variabile in una pagina JSP, proprio come la richiesta è. –

1

Utilizzare un framework MVC basato sui componenti che astrae tutti i brutti dettagli dell'API Servlet in modo da ottenere zero importazioni javax.servlet. Esempi di questo tipo sono JSF2 e Struts2. fagiolo

In JSF2 per esempio, si era appena dichiarare User classe come scope di sessione gestito:

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

Poi nel fagiolo "azione" che si sta utilizzando per l'elaborazione del modulo di presentare, fare riferimento a esso come proprietà gestita:

@ManagedBean 
@RequestScoped 
public class SomeFormBean { 

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

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

Questo è tutto.

Se desideri attenersi all'API servlet raw, devi convivere con il fatto che devi passare gli oggetti HttpServletRequest/HttpServletResponse non elaborati. La cosa migliore che puoi fare è fare il homegrow some abstraction (ma poi finisci come JSF2/Struts2 già facendo, quindi perché dovresti andare in homegrow, a meno che non sia per hobby/autoapprendimento :)).

0

In generale, come menzionato nelle altre risposte, la sessione in molti modi funge da negozio. Quindi, per interagire con una sessione di un'altra classe che è al di fuori del framework Servlet/JSP, è necessario procurarsi il riferimento alla sessione in questione. Ci sono alcuni modi per ottenerlo:

1) Passaggio della sessione come parte di un parametro del metodo (già menzionato in altre risposte) 2) Associazione della sessione a una variabile locale del thread sull'esecuzione del thread corrente (consultare ThreadLocal). Questo metodo ha il vantaggio di non dichiarare parametri specifici sulla firma del metodo della classe che deve utilizzare la sessione. Inoltre, se il thread chiamante passa attraverso una libreria e quindi chiama di nuovo una classe specifica, ad es. Servlet-> YourClass0 -> Apache Some Library -> YourClass1, la sessione sarà disponibile anche su YourClass1.

Tuttavia, il thread locale deve essere cancellato anche quando il thread in esecuzione ritorna attraverso il componente iniziale (diciamo servlet) altrimenti potrebbero esserci perdite di memoria.

Inoltre, fare riferimento al proprio framework specifico per il trattamento delle sessioni, il suddetto meccanismo funziona correttamente in Tomcat.

Problemi correlati