English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Il linguaggio delle espressioni JSP (EL) rende molto semplice l'accesso ai dati memorizzati nei JavaBean. Il JSP EL può essere utilizzato sia per creare espressioni aritmetiche che espressioni logiche. All'interno dell'espressione JSP EL possono essere utilizzati numeri interi, numeri a virgola mobile, stringhe, costanti true, false e null.
Tipicamente, quando devi specificare un valore di attributo in un tag JSP, puoi farlo semplicemente utilizzando una stringa:
<jsp:setProperty name="box" property="perimeter" value="100"/>
JSP EL ti permette di specificare un'espressione per rappresentare il valore dell'attributo. Un sintassi di espressione semplice è la seguente:
${expr}
In cui, expr si riferisce all'espressione. Nei JSP EL gli operatori comuni sono . e {} . Questi operatori permettono di accedere a vari attributi dei JavaBean tramite oggetti JSP incorporati.
Per esempio, il tag <jsp:setProperty> sopra può essere riscritto nella seguente forma utilizzando il linguaggio delle espressioni:
<jsp:setProperty name="box" property="perimeter"> value="${2*box.width+2*box.height}"/>
Quando il compilatore JSP vede la forma "${" negli attributi, genera il codice per calcolare questa espressione e crea un sostituto per il valore dell'espressione.
È anche possibile utilizzare il linguaggio delle espressioni nei testi dei modelli degli etichette. Ad esempio, il tag <jsp:text> inserisce semplicemente il testo del corpo nella uscita JSP:
<jsp:text> <h1>Hello JSP!</h1> </jsp:text>
Ora, utilizza espressioni nel corpo del tag <jsp:text> come segue:
<jsp:text> Perimetro del Box è: ${2*box.width + 2*box.height} </jsp:text>
Puoi utilizzare parentesi tonde per organizzare espressioni sottostanti nell'espressione EL. Ad esempio, ${(1 + 2) * 3} è uguale a 9, ma ${1 + (2 * 3)} è uguale a 7.
Per disabilitare la valutazione delle espressioni EL, è necessario impostare il valore dell'attributo isELIgnored della direttiva page su true:
<%@ page isELIgnored="true|false" %>
In questo modo, l'espressione EL sarà ignorata. Se impostato su false, il container calcolerà l'espressione EL.
L'espressione EL supporta la maggior parte degli operatori aritmetici e logici forniti da Java:
Operatore | Descrizione |
---|---|
. | Accedi a un attributo di un Bean o a un elemento di una mappa |
[] | Accedi a un elemento di un array o di una lista |
( ) | Organizza un'espressione sottostante per cambiare la priorità |
+ | Aggiungere |
- | Sottrarre o negativo |
* | Moltiplicare |
/ or div | Dividere |
% or mod | Modulo |
== or eq | Testa se è uguale |
!= or ne | Testa se è diverso |
< or lt | Testa se è minore |
> or gt | Testa se è maggiore |
<= or le | Testa se è minore o uguale a |
>= or ge | Testa se è maggiore o uguale a |
&& or and | Testa il logico e |
|| or or | Testa il logico o |
! or not | Testa il negativo |
empty | Testa se è un valore vuoto |
JSP EL ti permette di utilizzare le funzioni negli espressioni. Queste funzioni devono essere definite in una libreria di tag personalizzata. La sintassi dell'uso delle funzioni è la seguente:
${ns:func(param1, param2, ...)}
ns si riferisce a spazio nome (namespace), func si riferisce al nome della funzione, param1 si riferisce al primo parametro, param2 si riferisce al secondo parametro, ecc. Ad esempio, c'è una funzione fn:length definita nella libreria JSTL, che può essere utilizzata come segue per ottenere la lunghezza di una stringa:
${fn:length("Get my length")}
Per utilizzare le funzioni di qualsiasi libreria di tag, è necessario installare queste librerie sul server e poi includere queste librerie utilizzando il tag <taglib> nei file JSP.
JSP EL supporta gli oggetti impliciti elencati di seguito:
Oggetti impliciti | Descrizione |
---|---|
pageScope | Ambito pagina |
requestScope | Ambito richiesta |
sessionScope | Ambito sessione |
applicationScope | Ambito application |
param | Parametri dell'oggetto Request, stringa |
paramValues | Parametri dell'oggetto Request, insieme di stringhe |
header | Intestazioni informative HTTP, stringa |
headerValues | Intestazioni informative HTTP, insieme di stringhe |
initParam | Parametri di inizializzazione del contesto |
cookie | Valore Cookie |
pageContext | Il contesto pageContext della pagina corrente |
È possibile utilizzare questi oggetti negli espressioni, come se fossero variabili. Di seguito sono riportati alcuni esempi per una migliore comprensione del concetto.
L'oggetto pageContext è un riferimento all'oggetto pageContext in JSP. Attraverso l'oggetto pageContext, è possibile accedere all'oggetto request. Ad esempio, per accedere alla stringa di ricerca passata all'oggetto request, si può fare così:
${pageContext.request.queryString}
Le variabili pageScope, requestScope, sessionScope e applicationScope servono per accedere alle variabili memorizzate nei vari livelli di contesto.
Per esempio, se si desidera accedere esplicitamente alla variabile box nel livello applicationScope, si può fare in questo modo: applicationScope.box.
Gli oggetti param e paramValues servono per accedere ai valori dei parametri, utilizzando i metodi request.getParameter e request.getParameterValues.
Per esempio, per accedere a un parametro chiamato order, si può usare l'espressione: ${param.order} o ${param["order"]}.
Il seguente esempio dimostra come accedere al parametro username nella richiesta:
<%@ 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 una stringa singola, mentre l'oggetto paramValues restituisce un array di stringhe.
header 和 headerValues 对象用于访问信息头,通过使用 request.getHeader 方法和 request.getHeaders 方法。
例如,要访问一个名为 user-agent 的信息头,可以这样使用表达式:${header.user-agent},或者 ${header["user-agent"]}。
接下来的实例说明了如何访问 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>
运行结果如下:
header 对象返回单个值,而 headerValues 则返回一个字符串数组。