JSP - Expression Language (EL)
JSP Expression Language (EL) consente di accedere facilmente ai dati dell'applicazione archiviati nei componenti JavaBeans. JSP EL ti consente di creare entrambe le espressioni(a) aritmetica e (b)logico. All'interno di un'espressione JSP EL, è possibile utilizzareintegers, floating point numbers, strings, the built-in constants true and false per i valori booleani e null.
Sintassi semplice
In genere, quando si specifica un valore di attributo in un tag JSP, si utilizza semplicemente una stringa. Ad esempio:
<jsp:setProperty name = "box" property = "perimeter" value = "100"/>
JSP EL consente di specificare un'espressione per uno qualsiasi di questi valori di attributo. Una semplice sintassi per JSP EL è la seguente:
${expr}
Qui exprspecifica l'espressione stessa. Gli operatori più comuni in JSP EL sono. e []. Questi due operatori consentono di accedere a vari attributi di Java Beans e oggetti JSP incorporati.
Ad esempio, la sintassi precedente <jsp:setProperty> tag può essere scritto con un'espressione come -
<jsp:setProperty name = "box" property = "perimeter"
value = "${2*box.width+2*box.height}"/>
Quando il compilatore JSP vede il file ${} form in un attributo, genera codice per valutare l'espressione e sostituisce il valore di expresson.
È inoltre possibile utilizzare le espressioni JSP EL all'interno del testo del modello per un tag. Ad esempio, il file<jsp:text>tag inserisce semplicemente il suo contenuto all'interno del corpo di un JSP. Il seguente<jsp:text> inserti di dichiarazione <h1>Hello JSP!</h1> nell'output JSP -
<jsp:text>
<h1>Hello JSP!</h1>
</jsp:text>
È ora possibile includere un'espressione JSP EL nel corpo di un file <jsp:text> tag (o qualsiasi altro tag) con lo stesso ${}sintassi che usi per gli attributi. Ad esempio:
<jsp:text>
Box Perimeter is: ${2*box.width + 2*box.height}
</jsp:text>
Le espressioni EL possono utilizzare le parentesi per raggruppare le sottoespressioni. Per esempio,${(1 + 2) * 3} equals 9, but ${1 + (2 * 3)} equals 7.
Per disattivare la valutazione delle espressioni EL, specifichiamo il isELIgnored attributo della direttiva della pagina come di seguito -
<%@ page isELIgnored = "true|false" %>
I valori validi di questo attributo sono true e false. Se è vero, le espressioni EL vengono ignorate quando appaiono in testo statico o attributi di tag. Se è falso, le espressioni EL vengono valutate dal contenitore.
Operatori di base in EL
JSP Expression Language (EL) supporta la maggior parte degli operatori aritmetici e logici supportati da Java. La tabella seguente elenca gli operatori utilizzati più di frequente:
S.No. | Operatore e descrizione |
---|---|
1 | . Accedi a una proprietà del bean o alla voce della mappa |
2 | [] Accedi a un array oa un elemento List |
3 | ( ) Raggruppa una sottoespressione per modificare l'ordine di valutazione |
4 | + Aggiunta |
5 | - Sottrazione o negazione di un valore |
6 | * Moltiplicazione |
7 | / or div Divisione |
8 | % or mod Modulo (resto) |
9 | == or eq Verifica l'uguaglianza |
10 | != or ne Verifica la disuguaglianza |
11 | < or lt Prova per meno di |
12 | > or gt Prova per maggiore di |
13 | <= or le Prova per minore o uguale |
14 | >= or ge Prova per maggiore o uguale |
15 | && or and Test per AND logico |
16 | || or or Verifica l'OR logico |
17 | ! or not Complemento booleano unario |
18 | empty Verifica i valori delle variabili vuote |
Funzioni in JSP EL
JSP EL consente di utilizzare le funzioni anche nelle espressioni. Queste funzioni devono essere definite nelle librerie di tag personalizzate. L'utilizzo di una funzione ha la seguente sintassi:
${ns:func(param1, param2, ...)}
Dove ns è lo spazio dei nomi della funzione, func è il nome della funzione e param1è il primo valore del parametro. Ad esempio, la funzionefn:length, che fa parte della libreria JSTL. Questa funzione può essere utilizzata come segue per ottenere la lunghezza di una stringa.
${fn:length("Get my length")}
Per utilizzare una funzione da qualsiasi libreria di tag (standard o personalizzata), è necessario installare quella libreria sul server e includere la libreria nel JSP utilizzando il <taglib> direttiva come spiegato nel capitolo JSTL.
Oggetti impliciti JSP EL
Il linguaggio delle espressioni JSP supporta i seguenti oggetti impliciti:
S.No | Oggetto e descrizione impliciti |
---|---|
1 | pageScope Variabili con ambito dall'ambito della pagina |
2 | requestScope Variabili con ambito dall'ambito della richiesta |
3 | sessionScope Variabili con ambito dall'ambito della sessione |
4 | applicationScope Variabili con ambito dall'ambito dell'applicazione |
5 | param Richiedi parametri come stringhe |
6 | paramValues Richiedi parametri come raccolte di stringhe |
7 | header Intestazioni delle richieste HTTP come stringhe |
8 | headerValues Intestazioni delle richieste HTTP come raccolte di stringhe |
9 | initParam Parametri di inizializzazione del contesto |
10 | cookie Valori dei cookie |
11 | pageContext L'oggetto JSP PageContext per la pagina corrente |
È possibile utilizzare questi oggetti in un'espressione come se fossero variabili. Gli esempi che seguono ti aiuteranno a comprendere i concetti:
L'oggetto pageContext
L'oggetto pageContext consente di accedere all'oggetto JSP pageContext. Tramite l'oggetto pageContext è possibile accedere all'oggetto richiesta. Ad esempio, per accedere alla stringa di query in arrivo per una richiesta, è possibile utilizzare la seguente espressione:
${pageContext.request.queryString}
Gli oggetti dell'ambito
Il pageScope, requestScope, sessionScope, e applicationScope le variabili forniscono l'accesso alle variabili memorizzate a ogni livello di ambito.
Ad esempio, se è necessario accedere in modo esplicito alla variabile box nell'ambito dell'applicazione, è possibile accedervi tramite la variabile applicationScope come applicationScope.box.
Gli oggetti param e paramValues
Gli oggetti param e paramValues consentono di accedere ai valori dei parametri normalmente disponibili tramite request.getParameter e request.getParameterValues metodi.
Ad esempio, per accedere a un parametro denominato order, utilizzare l'espressione ${param.order} o ${param["order"]}.
Di seguito è riportato l'esempio per accedere a un parametro di richiesta denominato nomeutente:
<%@ page import = "java.io.*,java.util.*" %>
<%String title = "Accessing Request Param";%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align = "center">
<p>${param["username"]}</p>
</div>
</body>
</html>
L'oggetto param restituisce valori di stringa singola, mentre l'oggetto paramValues restituisce array di stringhe.
oggetti header e headerValues
Gli oggetti header e headerValues consentono di accedere ai valori di intestazione normalmente disponibili tramite request.getHeader e il request.getHeaders metodi.
Ad esempio, per accedere a un'intestazione denominata user-agent, utilizza l'espressione ${header.user-agent} o ${header["user-agent"]}.
Di seguito è riportato l'esempio per accedere a un parametro di intestazione denominato user-agent:
<%@ page import = "java.io.*,java.util.*" %>
<%String title = "User Agent Example";%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align = "center">
<p>${header["user-agent"]}</p>
</div>
</body>
</html>
L'output sarà in qualche modo come il seguente:
User Agent Example
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; .NET4.0C; InfoPath.2)
L'oggetto header restituisce valori di stringa singola, mentre l'oggetto headerValues restituisce array di stringhe.