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

JSP-Expressionssprache

Die JSP-Expression Language (EL) erleichtert den Zugriff auf Daten, die in JavaBeans gespeichert sind. Die JSP-EL kann sowohl zur Erstellung arithmetischer als auch logischer Ausdrücke verwendet werden. In JSP-EL-Ausdrücken können Ganzzahlen, Fließkommazahlen, Zeichenfolgen, Konstanten true, false und null verwendet werden.

Eine einfache Syntax

Typischerweise verwenden Sie einfach einen String, wenn Sie einen Attributswert in einem JSP-Tag angeben müssen:

<jsp:setProperty name="box" property="perimeter" value="100"/>

Die JSP-EL ermöglicht es Ihnen, einen Ausdruck zur Angabe eines Attributswerts zu spezifizieren. Eine einfache Syntax für Ausdrücke ist wie folgt:

${expr}

Hierbei bezieht sich expr auf den Ausdruck. In der JSP-EL sind die universellen Operatoren . und {} . Diese Operatoren erlauben es Ihnen, über eingebettete JSP-Objekte auf verschiedene JavaBean-Attribute zuzugreifen.

Nehmen wir an, dass das obige <jsp:setProperty>-Tag in folgender Form in der Expression Language umgeschrieben werden kann:

<jsp:setProperty name="box" property="perimeter" 
                 value="${2*box.width+2*box.height"/>

Wenn der JSP-Compiler das Format "${" in den Eigenschaften erkennt, generiert er Code, um diesen Ausdruck zu berechnen und einen Ersatz für den Wert des Ausdrucks zu erzeugen.

Sie können auch Ausdruckslanguage in der Mustertext des Tags verwenden. Zum Beispiel fügt der <jsp:text>-Tag den Text einfach in die JSP-Ausgabe ein:

<jsp:text>
<h1>Hello JSP!</h1>
</jsp:text>

Jetzt können Sie in der Hauptstelle des <jsp:text>-Tags Ausdrücke verwenden, wie folgt:

<jsp:text>
Box Perimeter is: ${2*box.width + 2*box.height}
</jsp:text>

Man kann in EL-Ausdrücken runde Klammern verwenden, um Unterexpressionen zu organisieren. Zum Beispiel ${(1 + 2) * 3equals9, aber ${1 + (2 * 3equals7.

Um die Bewertung von EL-Ausdrücken zu deaktivieren, müssen Sie das Attribut isELIgnored mit dem page-Anweisung auf true setzen:

<%@ page isELIgnored="true|false" %>

Dadurch wird der EL-Ausdruck ignoriert. Wenn auf false gesetzt, wird der Container den EL-Ausdruck berechnen.

Basisoperatoren in EL

EL- Ausdrücke unterstützen die meisten arithmetischen und logischen Operatoren, die Java bietet:

OperatorBeschreibung
. Ein Bean-Attribut oder einen Eintrag einer Map ansprechen
[] Ein Element eines Arrays oder einer Liste ansprechen
( ) Eine Unterexpression organisieren, um die Priorität zu ändern
+ Addieren
- Verringern oder negativ
* Multiplizieren
/ or div Dividieren
% oder mod Modulo
== oder eq Testen, ob gleich
!= oder ne Testen, ob ungleich
< oder lt Testen, ob kleiner
> oder gt Testen, ob größer
<= oder le Testen, ob kleiner gleich
>= oder ge Testen, ob größer gleich
&& oder und Testen, ob logisch und
|| oder oder Testen, ob logisch oder
! oder nicht Testen, ob der Wert invertiert ist
empty Testen, ob ein Wert leer ist

Funktionen in JSP EL

JSP EL ermöglicht es Ihnen, Funktionen in Ausdrücken zu verwenden. Diese Funktionen müssen in benutzerdefinierten Taglibs definiert sein. Die Syntax für die Verwendung von Funktionen ist wie folgt:

${ns:func(param1, param2, ...)}

ns bezieht sich auf den Namensraum (namespace), func bezieht sich auf den Namen der Funktion, param1Bezieht sich auf den ersten Parameter, param2Bezieht sich auf den zweiten Parameter, usw. Zum Beispiel, es gibt eine Funktion fn:length, die in der JSTL-Bibliothek definiert ist und so verwendet werden kann, um die Länge eines Strings zu erhalten:

${fn:length("Get my length")}

Um Funktionen aus jeder Taglib zu verwenden, müssen Sie diese Bibliotheken auf dem Server installieren und die <taglib>-Tag in der JSP-Datei verwenden, um diese Bibliotheken zu enthalten.

Verborgene JSP EL-Objekte

Unterstützt JSP EL die folgenden versteckten Objekte:

Verborgene ObjekteBeschreibung
pageScope Seitenscope
requestScope Anfordrungsscope
sessionScope Sitzungsscope
applicationScope Anwendungsscope
param Parameter des Request-Objekts, String
paramValues Parameter des Request-Objekts, String-Kollektion
header HTTP-Informationskopf, String
headerValues HTTP-Informationskopf, String-Kollektion
initParam Kontextinitialisierungsparameter
cookie Cookie-Werte
pageContext Der 'pageContext' der aktuellen Seite

Diese Objekte können in Ausdrücken wie Variablen verwendet werden. Im Folgenden werden einige Beispiele gegeben, um dieses Konzept besser zu verstehen.

pageContext-Objekt

Das 'pageContext'-Objekt ist eine Referenz auf den 'pageContext'-Objekt in JSP. Über das 'pageContext'-Objekt kann man auf den 'request'-Objekt zugreifen. Zum Beispiel, um den übergebenen Query-String des 'request'-Objekts abzurufen, könnte man dies so tun:

${pageContext.request.queryString}

Scope-Objekt

Die Variablen 'pageScope', 'requestScope', 'sessionScope', 'applicationScope' dienen dazu, Variablen in verschiedenen Scope-Ebenen abzurufen.

Wenn man eine Variable 'box' im 'applicationScope'-Bereich explizit aufrufen möchte, kann dies so erfolgen: applicationScope.box.

Die 'param' und 'paramValues'-Objekte

Die 'param' und 'paramValues'-Objekte dienen dazu, Parameterwerte abzurufen, indem die Methoden 'request.getParameter' und 'request.getParameterValues' verwendet werden.

Um einen Parameter namens 'order' abzurufen, kann man die Ausdrücke ${param.order} oder ${param["order"]} verwenden.

Der folgende Beispiel zeigt, wie man auf den Parameter 'username' im Request zugreift:

<%@ 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>

Das 'param'-Objekt gibt einen einzigen String zurück, während das 'paramValues'-Objekt ein String-Array zurückgibt.

header und headerValues-Objekte

Die header- und headerValues-Objekte werden verwendet, um Headerinformationen abzurufen, indem die Methoden request.getHeader und request.getHeaders verwendet werden.

Zum Beispiel, um auf einen als user-agent-Headerinformationen wie folgt verwendet werden können: ${header.user-agent} oder ${header["user-agent"]}.

Der folgende Beispiel zeigt, wie man auf user-Agenten-Header-Informationen:

<%@ 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>

Das Ausgabergebnis ist wie folgt:

Das header-Objekt gibt einen einzigen Wert zurück, während headerValues ein String-Array zurückgibt.