PDA

View Full Version : [java-jsp] variabili di sessione


prazision
13-06-2005, 18:16
Su un sito fatto in jsp che gira su tomcat-apache ho usato delle variabili di sessione per memorizzare dei dati(sono costretto a utilizzare le variabili di sessione, è lungo da spiegare ma è così).

In particolare ci sono 15 variabili di sessioni, ognuna delle quali può contenere una stringa di una ventina di caratteri.



domanda n*1: conviene mantenere qusta struttura o utilizzare un unico array(contenente tutte le stringhe) che metto in un'unica variabile di sessione???



domanda n*2: come si calcola in questo caso la memoria della Virtual Machine occupata da un'implementazione simile??? ammettiamo che le stringhe siano da 10 Byte l'una e che le variabili di sessione siano 15 e che gli utenti(che navigano il sito contemporaneamente) siano 100 devo fare qualcosa tipo 10*15*100=15.000 Byte

grazie

it_developer
14-06-2005, 12:27
domanda n*1: conviene mantenere qusta struttura o utilizzare un unico array(contenente tutte le stringhe) che metto in un'unica variabile di sessione???


Dunque so che può essere una rogna sentirselo dire sempre ma in questo caso conviene cambiare la strategia con cui affronti il problema...

Non è preferibile utilizzare le JSP quando ti trovi con una grossa mole di variabili da memorizzare...è buona norma infatti utilizzare a loro posto una semplice servlet che reindirizzerà l'utente ad una jsp contenente i risultati dell'operazione...

Chiusa questa parentesi...quando tu inserisci delle variabili nella Session, la variabile da te inviata viene messa in un oggetto HashMap...che è simile ad una tabella...ora qui credo che ci siano diverse opinioni in merito....per me è preferibile utilizzare le variabili singole (se proprio le devi utilizzare con la session e le jsp...) perchè l'array è più difficile da gestire in termini di oggetti aggiunti o rimossi!

domanda n*2: come si calcola in questo caso la memoria della Virtual Machine occupata da un'implementazione simile??? ammettiamo che le stringhe siano da 10 Byte l'una e che le variabili di sessione siano 15 e che gli utenti(che navigano il sito contemporaneamente) siano 100 devo fare qualcosa tipo 10*15*100=15.000 Byte

Con precisione non saprei...perchè come tu sai java è molto misterioso per il fattore memoria + variabili...devi considerare che qualsiasi oggetto non è formato solo dai suoi dati interni ma anche da tutte le variabili e dai suoi stessi riferimenti (che in linea di massima generano un piccolo overhead...) senza considerare poi in 100 oggetti sessione, pageContext, e tutto il resto...

Per questo motivo a volte non è preferibile portarsi dietro molti dati nella sessione...come vedi nel tuo caso non vai sopra i 15kb...quindi non dovrebbe influire sul fattore memoria...ma se al posto di String usi oggetti più pesanti...potresti avere un degrado di performance...

Ovvio che poi si devono valutare le cose caso per caso...se vuoi un parere + specifico posta un po' di codice...che sicuramente tutto si chiarisce!

Ciao,
spero di esserti stato utile,
it_developer

prazision
14-06-2005, 15:27
Dunque so che può essere una rogna sentirselo dire sempre ma in questo caso conviene cambiare la strategia con cui affronti il problema...

Non è preferibile utilizzare le JSP quando ti trovi con una grossa mole di variabili da memorizzare...è buona norma infatti utilizzare a loro posto una semplice servlet che reindirizzerà l'utente ad una jsp contenente i risultati dell'operazione...

Chiusa questa parentesi...quando tu inserisci delle variabili nella Session, la variabile da te inviata viene messa in un oggetto HashMap...che è simile ad una tabella...ora qui credo che ci siano diverse opinioni in merito....per me è preferibile utilizzare le variabili singole (se proprio le devi utilizzare con la session e le jsp...) perchè l'array è più difficile da gestire in termini di oggetti aggiunti o rimossi!



Con precisione non saprei...perchè come tu sai java è molto misterioso per il fattore memoria + variabili...devi considerare che qualsiasi oggetto non è formato solo dai suoi dati interni ma anche da tutte le variabili e dai suoi stessi riferimenti (che in linea di massima generano un piccolo overhead...) senza considerare poi in 100 oggetti sessione, pageContext, e tutto il resto...

Per questo motivo a volte non è preferibile portarsi dietro molti dati nella sessione...come vedi nel tuo caso non vai sopra i 15kb...quindi non dovrebbe influire sul fattore memoria...ma se al posto di String usi oggetti più pesanti...potresti avere un degrado di performance...

Ovvio che poi si devono valutare le cose caso per caso...se vuoi un parere + specifico posta un po' di codice...che sicuramente tutto si chiarisce!

Ciao,
spero di esserti stato utile,
it_developer


codice???
beh è semplice, diciamo che per 15 variabili di sessione scrivo qualcosa del tipo:
session.setAttribute("sessione1", str1);
session.setAttribute("sessione2", str2);
ecc.

dove str1 è una string di 10/15 caratteri

cosa intendi per "overhead"?

grazie

it_developer
15-06-2005, 12:16
cosa intendi per "overhead"?

Sicuramente non è il termine più appropriato in questo caso...comunque mi riferisco al fatto che quando definisci un oggetto...non occupa memoria solo quello che contiene l'oggetto...ma anche la definizione stessa d'oggetto!

In java esistono oggetti molto grandi...perchè hanno molti campi e molti riferimeti...e anche appena instanziati...con alcuni campi vuoti...occupano la loro bella quantità in memoria...

Non è il tuo caso...perchè lavori con 15 stringhe...ma come ti ho detto è buona norma utilizzare una servlet!

In questo specifico caso...se realizzi tutto con una jsp...va bene lo stesso...ma quando vai a realizzare qualcosa di più impegnativo...tutto diventerà più complicato se utilizzerai solamente jsp!

Ti consiglio di dare un occhiatina al patter MVC (Model View Controller) trovi tutto su google...questo pattern specifica la divisione dei vari compiti a tre enti diversi...fornendo alla web application una certa stabilità e generalizzazione che non ottieni con semplice jsp!

Ciao,
it_developer

PS: Mvc lavora con Jsp + Servlet + JavaBean... ;)

prazision
15-06-2005, 14:29
grazie