Resumos

Apontamentos universitários em formato Markdown do Obsidian.

Expression Language

download Descarregar MD

L'Expression Language (EL) è una sintassi semplificata per accedere ai dati memorizzati nei JavaBeans e negli oggetti scoped (Request, Session, Application) all'interno delle JSP, senza dover scrivere codice Java (scriptlet). L'obiettivo è rimuovere i tag <% ... %> dalle JSP per renderle più leggibili e focalizzate solo sulla presentazione.

Sintassi di Base

Tutte le espressioni EL iniziano con ${ e finiscono con }.

<%-- Vecchio stile scriptlet --%>
<%= request.getAttribute("utente") %>

<%-- Nuovo stile EL --%>
${utente}

[!TIP] Vantaggio: Gestione Null Se un attributo non esiste, EL non stampa nulla (mentre lo scriptlet potrebbe stampare null). Inoltre, EL gestisce automaticamente le eccezioni come NullPointerException.

Accesso alle Proprietà (Dot Notation)

EL usa la "Dot Notation" per accedere alle proprietà di un oggetto. Quando scriviamo ${oggetto.proprieta}, EL chiama automaticamente il metodo getter corrispondente.

Esempio con un oggetto Persona:

${studente.nome}    <%-- Chiama studente.getNome() --%>
${studente.eta}     <%-- Chiama studente.getEta() --%>

Accesso a Collezioni e Mappe

Oltre al punto ., si può usare la notazione con parentesi quadre [].

Array e Liste

Si usa l'indice numerico.

${listaStudenti[0]}      <%-- Primo elemento --%>
${arrayVoti[i]}          <%-- Indice dinamico --%>

Map (Dizionari)

Si usa la chiave.

${mappaCitta["Roma"]}    <%-- Equivale a mappa.get("Roma") --%>
${mappaCitta.Roma}       <%-- Notazione punto (se la chiave non ha caratteri speciali) --%>

Quando usare [] invece di .?

  1. Per nomi di proprietà con caratteri illegali (es. ${header["User-Agent"]}).
  2. Per accedere a indici di array/liste.
  3. Quando la chiave è una variabile (es. ${mappa[variabileChiave]}).

    Oggetti Impliciti EL

    EL fornisce oggetti pronti all'uso per accedere ai metadati della richiesta.

    • param: Parametri della query string (es. ${param.id}).
    • header: Header HTTP (es. ${header["host"]}).
    • cookie: Accesso ai cookie.
    • sessionScope: Forza la ricerca solo in sessione.
    • requestScope: Forza la ricerca solo nel request.
    • pageContext: Accesso a tutto il contesto JSP.

Esempio utile: Benvenuto, ${sessionScope.user.nome} (cerca l'utente solo in sessione, ignorando eventuali omonimi nel request).