Newsgroup: it.comp.java
Titolo: getAttribute vs. getParameter

La domanda probabilmente è banale. Il mio problema è che mi sono costruito
un'applicazione il cui flusso prevede servlet che inoltrano a servlet e jsp
attraverso una RequestDispatcher e di jsp che inoltrano a servlet mediante
controlli javascritp sull'onClick di un button.
Il problema è che si io setto all'interno di una jsp o di una servlet un
oggetto attraverso request.setAttribute(nome, valore), e poi inoltro a una
servlet o a una jsp in queste ultime non riesco a capire se lo debba
riprendere attraverso un getParameter o un getAttribute. Il parametro che ho
messo nella request attraverso un setAttribute, a volte lo ritrovo nei
parametri (e quindi va ripreso con un getParameter) e a volte tra gli
attributi (e lo riprendo con un getAttribute), se sbaglio ovviamente ottengo
un null e il tutto senza una logica apparente. Ovviamente una logica c'è ;-)
... qualcuno me la può spiegare?
Grazie.
--------------------------------
Inviato via 
http://usenet.libero.it

Dunque, c'è una differenza fondamentale. Cerco di spiegartela.
getParameter: prende un parametro dalla request. Come è stato passato il
parametro?:
il parametro viene passato da un form html, e può essere passato in post o
in get. Quindi, quando un form ha l'action su una determinata pagina, quella
pagina potrà riprendere i parametri passati dal form.
Inoltre, i parametri in get possono anche essere passati dall'url
(pagina.jsp?parametro=valore&parametro2=altrovalore).
Questo senza scendere nel dettaglio.
getAttribute: prende un parametro dalla sessione. Quindi, affinché
l'attributo di sessione possa essere ripreso, occorre che prima qualcuno ce
l'abbia messo, in sessione (session.setAttribute("nome", valore).
Spero di essere stato chiaro, in caso contrario dillo che vedrò di
approfondire...
Ciao


 l'abbia messo, in sessione (session.setAttribute("nome", valore).
Si, getAttribute è un metodo dell'interfaccia HttpSessio ma io non mi
riferivo a questo ma al metodo omonimo dell'interfaccia HttpServletRequest
(ereditato dall'interfaccia ServletRequest). In sostanza i due metodi di cui
parlo, getParameter e getAttribute, appartengono entrambi all'interfaccia
ServletRequest.
Grazie per la risposta.


 Grazie per la risposta.
Beh, non c'avevo mai fatto caso :)
Che dire, mi incuriosisce parecchio, ad un prima lettura non ho capito :( a
cosa serve, sembra del tutto simile a quello di sessione. Magari domani ci
butto un'occhio...


Dunque, ci ho dato un'occhiata, e ho tratto alcune conclusioni (che
potrebbero però essere sbagliate, bada bene :)).
A quanto pare il metodo getAttribute dell'interfaccia HttpServletRequest
serve quando viene usata (mi sembra che sia il tuo caso) una
RequestDispatcher. Ora, io la requestDispatcher non l'ho mai usata, comunque
immagino che debba servire per "trascinare" il parametro (che di solito
"vive" per una sola request) attraverso + passaggi. Infatti, la
requestDispatcher consta di un metodo setAttribute("nome", valore) che
permette di settare un attributo che sarà poi ripreso dalla
HttpServletRequest. Quindi, deduco che questo attributo, diversamente da
quelli di sessione, "muore" quando la richiesta viene esaudita (quindi
quando non ci sono più passaggi attraverso le dispatcher).
Tutto questo, ripeto, lo dico "a naso" visto che non ho mai sperimentato di
persona il funzionamento della requestDispatcher...
Ciao


Ok, ci do un'occhiata. Sperimento e poi ti faccio sapere.
Grazie in ogni caso.
