JSP Ausdruckssprache

JSP-Ausdruckssprache (EL) macht es sehr einfach, auf in JavaBeans gespeicherte Daten zuzugreifen. JSP EL kann sowohl zum Erstellen arithmetischer Ausdrücke als auch logischer Ausdrücke verwendet werden. Innerhalb von JSP-EL-Ausdrücken können Sie Ganzzahlen, Gleitkommazahlen, Zeichenketten, die Konstanten true und false sowie null verwenden.


Eine einfache Syntax

Typischerweise verwenden Sie einfach eine Zeichenkette, wenn Sie einen Attributwert in einem JSP-Tag angeben müssen:

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

Mit JSP EL können Sie einen Ausdruck angeben, um einen Attributwert darzustellen. Eine einfache Ausdruckssyntax lautet wie folgt:

${expr}

Hier bezieht sich expr auf den Ausdruck. Die gebräuchlichen Operatoren in JSP EL sind.und{}. Diese beiden Operatoren ermöglichen den Zugriff auf verschiedene JavaBean-Eigenschaften über eingebettete JSP-Objekte.

Zum Beispiel kann das obige <jsp:setProperty>-Tag unter Verwendung der Ausdruckssprache wie folgt umgeschrieben werden:

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

Wenn der JSP-Compiler das Format "${}" in einem Attribut antrifft, generiert er Code, um diesen Ausdruck auszuwerten, und erzeugt einen Ersatz, der den Wert des Ausdrucks ersetzt.

Sie können Ausdruckssprache auch im Vorlagentext von Tags verwenden. Zum Beispiel fügt das <jsp:text>-Tag einfach den Text aus seinem Body in die JSP-Ausgabe ein:

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

Verwenden Sie nun einen Ausdruck im Body des <jsp:text>-Tags, etwa so:

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

Klammern können in EL-Ausdrücken verwendet werden, um Teilausdrücke zu gruppieren. Zum Beispiel ergibt ${(1 + 2) * 3} 9, aber ${1 + (2 * 3)} ergibt 7.

Um die Auswertung von EL-Ausdrücken zu deaktivieren, müssen Sie die page-Direktive verwenden, um den Wert des Attributs isELIgnored auf true zu setzen:

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

Auf diese Weise werden EL-Ausdrücke ignoriert. Wenn er auf false gesetzt wird, wertet der Container EL-Ausdrücke aus.


Grundlegende Operatoren in EL

EL-Ausdrücke unterstützen die meisten von Java bereitgestellten arithmetischen und logischen Operatoren:

Operator Beschreibung
. Zugriff auf eine Bean-Eigenschaft oder einen Map-Eintrag
[] Zugriff auf ein Element eines Arrays oder einer Liste
( ) Einen Teilausdruck gruppieren, um die Rangfolge zu ändern
+ hinzufügen
- Subtraktion oder unäres Minus
* multiply
/ oder div divide
% oder mod Modulo
== oder eq Test auf Gleichheit
!= oder ne Test auf Ungleichheit
< oder lt Test auf kleiner als
> oder gt Test auf größer als
<= oder le Test auf kleiner als oder gleich
>= oder ge Test auf größer als oder gleich
&& oder and Logisches AND testen
|| oder or Logisches OR testen
! oder not Logisches NOT testen
empty Test auf leeren Wert

Funktionen in JSP EL

JSP EL ermöglicht die Verwendung von Funktionen in Ausdrücken. Diese Funktionen müssen in benutzerdefinierten Tag-Bibliotheken definiert sein. Die Syntax für die Verwendung einer Funktion ist wie folgt:

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

ns verweist auf den Namespace, func verweist auf den Namen der Funktion, param1 verweist auf den ersten Parameter, param2 verweist auf den zweiten Parameter und so weiter. Zum Beispiel gibt es eine Funktion fn:length, definiert in der JSTL-Bibliothek, die verwendet werden kann, um die Länge einer Zeichenkette wie folgt zu ermitteln:

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

Um Funktionen aus einer beliebigen Tag-Bibliothek zu verwenden, müssen Sie diese Bibliotheken auf dem Server installieren und sie dann mithilfe des <taglib>-Tags in JSP-Dateien einbinden.


Implizite Objekte der JSP-EL

JSP-EL unterstützt die in der folgenden Tabelle aufgeführten impliziten Objekte:

Implizites Objekt Beschreibung
pageScope Seitenbereich
requestScope Anfragebereich
sessionScope Sitzungsbereich
applicationScope Anwendungsbereich
param Parameter des Request-Objekts, String
paramValues Parameter des Request-Objekts, String-Sammlung
header HTTP-Header, String
headerValues HTTP-Header, String-Sammlung
initParam Initialisierungsparameter des Kontexts
cookie Cookie-Werte
pageContext Der pageContext der aktuellen Seite

Sie können diese Objekte in Ausdrücken genau wie Variablen verwenden. Im Folgenden werden mehrere Beispiele gegeben, um dieses Konzept besser zu verstehen.


Das pageContext-Objekt

Das pageContext-Objekt ist eine Referenz auf das pageContext-Objekt in JSP. Über das pageContext-Objekt können Sie auf das request-Objekt zugreifen. Um beispielsweise auf den vom request-Objekt übergebenen Query-String zuzugreifen, gehen Sie wie folgt vor:

${pageContext.request.queryString}

Scope-Objekte

Die Variablen pageScope, requestScope, sessionScope und applicationScope werden verwendet, um auf Variablen zuzugreifen, die auf verschiedenen Scope-Ebenen gespeichert sind.

Wenn Sie beispielsweise explizit auf die Variable box in der applicationScope-Ebene zugreifen müssen, können Sie wie folgt darauf zugreifen: applicationScope.box.


Die Objekte param und paramValues

Die Objekte param und paramValues werden verwendet, um mithilfe der Methode request.getParameter und der Methode request.getParameterValues auf Parameterwerte zuzugreifen.

Um beispielsweise auf einen Parameter namens order zuzugreifen, können Sie den Ausdruck ${param.order} oder ${param["order"]} verwenden.

Das folgende Beispiel zeigt, wie auf den Parameter username in der Anfrage zugegriffen wird:

<%@ 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 eine einzelne Zeichenkette zurück, während das paramValues-Objekt ein Array von Zeichenketten zurückgibt.


Die Objekte header und headerValues

Die Objekte header und headerValues werden verwendet, um mithilfe der Methode request.getHeader und der Methode request.getHeaders auf Header zuzugreifen.

Um beispielsweise auf einen Header namens user-agent zuzugreifen, können Sie den Ausdruck ${header.user-agent} oder ${header["user-agent"]} verwenden.

Das folgende Beispiel zeigt, wie auf den user-agent-Header zugegriffen wird:

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

Die Ausgabe sieht wie folgt aus:

jsp-expression-language

Das Objekt header gibt einen einzelnen Wert zurück, während headerValues ein Array von Zeichenfolgen zurückgibt.

Weitere Erweiterungen