English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JSP 表达式语言

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.

Un sintassi semplice

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.

Operatori di base nell'EL

L'espressione EL supporta la maggior parte degli operatori aritmetici e logici forniti da Java:

OperatoreDescrizione
. 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

Funzioni in JSP EL

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.

Oggetti impliciti JSP EL

JSP EL supporta gli oggetti impliciti elencati di seguito:

Oggetti implicitiDescrizione
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.

Oggetto pageContext

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}

Oggetto Scope

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

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 对象

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 则返回一个字符串数组。