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.