Diciamo che ho un semplice servlet di login che controlla il passaggio name
e crea l'oggetto User
e lo memorizza in una sessione.Servlet Java e JSP che accedono allo stesso bean di sessione
User user = new User();
user.setId(name);
request.getSession().setAttribute("user", user);
response.sendRedirect("index.jsp");
Nella pagina index.jsp
ho accedere all'oggetto utente attraverso jsp:useBean
<jsp:useBean id="user" scope="session"
class="package.name.User"/>
<div class="panel">
Welcome ${user.id}
</div>
Funziona così lontano.
Dalla documentazione fagioli jsp
Per individuare o un'istanza Bean, prende le seguenti passaggi, in questo ordine:
- tenta di individuare un fagiolo con la portata e il tuo nome specificare.
- Definisce una variabile di riferimento oggetto con il nome specificato.
- Se trova il bean, memorizza un riferimento ad esso nella variabile. Se il tipo specificato è , viene assegnato il bean .
- Se non trova il bean, lo istanzia dalla classe che si specifica , memorizzando un riferimento ad esso in la nuova variabile. Se il nome della classe rappresenta un modello serializzato, il bean viene istanziato da java.beans.eans.
- Se ha istanziato (anziché localizzato) il bean e se ha tag o elementi del corpo (tra e), esegue i tag del corpo.
Le domande:
tenta di individuare un fagiolo con la portata e nome specificato
Non specifica il processo di "localizzare". Significa che controllerà HttpServletRequest.getSession()
o semplicemente controllerà se altre pagine hanno già creato questo bean o no?
Se non trova il bean, lo istanzia dalla classe specificata, memorizzando un> riferimento ad esso nella nuova variabile.
Ciò significa in realtà che Jsp può associare un fagiolo appena creato con sessione utilizzando jsp_internal_name_user. Non si sa come Jsp memorizza e trova i bean nella sessione.
Esiste un'opzione per accedere agli oggetti di sessione utilizzando ${sessionScope.user}
e questo garantirà l'acquisizione di "utente" dall'oggetto di sessione Java. Lo stesso che ho messo da solo.
Java EE 5 esempio "Libreria" accede agli oggetti di sessione utilizzando l'approccio ${sessionScope.name}
.
utilizzando solo ${user}
funziona. E questo è ciò che mi preoccupa. Mi piacerebbe vedere una specifica frase nelle specifiche sul processo locate
e se ${user}
deve funzionare o se dipende dall'implementazione di riferimento JSP e/o JSTL.
C'è qualche documentazione che descrivono in modo esplicito il processo delle variabili risolvere in una pagina jsp? –
Intellij IDEA completa i campi variabili solo in caso di dichiarazione esplicita. –
1) Stai parlando di EL? Controlla la [specifica JSP EL] (https://jsp.dev.java.net/spec/jsp-2_1-fr-spec-el.pdf). In poche parole, 'PageContext # findAttribute()' per individuare gli attributi in qualsiasi ambito. 2) Questo è davvero anche un altro argomento che ho visto prima. – BalusC