Unified Expression Language
Die Java Unified Expression Language (dt. vereinheitlichte Ausdrucksprache) ist eine special purpose programming language, die hauptsächlich in Java Web-Anwendungen zum Einbetten von Ausdrücken in Web-Seiten verwendet wird. Die Java-Spezifikationsersteller und Expertengruppen der Technologie der Java Web-Ebene have worked on a unified expression language die erstmal in der JSP 2.1-Specification (JSR-245) integriert, und später spezifiziert durch sich selbst in JSR-341, als Teil von Java EE 7.
Geschichte
Die Expression Language begann als Teil der JavaServer Pages Standard Tag Library (JSTL) und wurde ursprünglich SPEL (Simplest Possible Expression Language), nachfolgend jedoch nur noch Expression Language (EL) genannt. Es war eine Skriptsprache, die den Zugriff auf Java-Komponenten (JavaBeans) über JSP erlaubte. Seit JSP 2.0 wurde sie innerhalb von JSP-Befehlen genutzt um Java-Quelltext von JSP zu trennen und leichteren Zugriff auf Java-Komponenten (als mittels Java-Code) zu ermöglichen.
Über die Jahre hat sich die Expression Language weiterentwickelt, fortgeschrittenere Funktionalität integriert und wurde letztlich in die JSP 2.0-Spezifikation aufgenommen. Das Erstellen von Skripten wurde für Gestalter von Web-Inhalten vereinfacht, da diese üblicherweise über wenige bis keine Kenntnisse der Kernsprache Java verfügen. Diese Skriptfunktionalität machte aus JSP ein Skriptsprache im ursprünglichen Sinn. Vor der EL bestand JSP aus wenigen speziellen Befehlen, wie Scriptlets, Ausdrücken, usw. in die expliziter Java-Quelltext eingefügt wurde. Seit der Integration der EL müssen Gestalter von Web-Inhalten nur noch wissen, wie die Java-Kernmethoden korrekt aufzurufen sind.
EL war, sowohl syntaktisch als auch semantisch, ähnlich zu JavaScript-Ausdrücken:
- es gibt keine ausdrückliche Typumformung
- Typumwandlungen erfolgen üblicherweise implizit
- doppelte und einfache Anführungszeichen sind gleichbedeutend
object.property
hat die selbe Bedeutung wieobject['property']
EL also liberated the programmer from having to know the particularities of how the values are actually accessed: object.property
can mean (depending on what the object
is) either object.get("property")
or object.getProperty("property")
or object.getProperty()
etc.
Während der Entwicklung von JSP 2.0, wurde die Technik JavaServer Faces veröffentlicht, die ebenfalls eine Expression Language benötigte. Jedoch genügte die, in der JSP 2.0-Spezifikation definierte, Expression Language nicht allen für die Entwicklung mit JSF nötigen Anforderungen. Die offensichtlichsten Einschränkungen lagen darin, dass deren Ausdrücke unmittelbar ausgewertet wurden und dass JSF-Komponenten keine Methoden auf server-seitigen Objekte aufrufen konnten. Deshalb wurde eine mächtige Sprache mit den folgenden neuen Eigenschaften geschaffen:
- Verzögerte Ausdrücke, die nicht unmittelbar ausgewertet wurden
- Ausdrücke die Daten sowohl lesen, als auch schreiben können
- Methodenausdrücke, die Methoden aufrufen können
Die neue Expression Language funktionierte gut für JSF-Belange. Jedoch führte das Integrieren der JSP-EL mit der JSF-EL zu Konflikten. Auf Grund dieser Inkompatibilitäten wurde die Initiative für die Unified Expression Language gestartet um diese Expression Languages zu vereinheitlichen. Mit der Spezifikation JSP 2.1 wurden die Ausdrucksprachen von JSP 2.0 und JSF 1.1 in eine einzige vereinheitliche Expression Language (EL 2.1) zusammengeführt.
Version 3.0 der Expression Language (das vereinheitlicht wurde nicht länger als nötig erachtet) wurde in JSR-341 unabhängig von den JSP- und JSF-Spezifikationen entwickelt. Einige neue Funktionen wurden hinzugefügt, vor allem die EL-Äquivalente zu Streams and Lambda-Ausrücken aus Java 8.[1]
Besonderheiten
Die neue vereinheitlichte EL ist eine Verbindung der JSP- und der JSF Expression Languages. In addition to the features already available in the JSP EL, the unified EL has the following features:
- Verzögerte Auswertung
- Unterstützung für Ausdrücke, die Werte setzen können und Ausdrücke, die Methoden aufrufen können
- Eine austauschbare API zum Auflösen von Ausdrücken
Beispiele
Ein einfaches Beispiel der Unified EL wie sie innerhalb eines JSTL "c:out"-Befehls verwendet wird:
<c:out value="${myBean.myField}" />
Ein Ausdruck, der eine Methode mit einem Parameter aufruft:
${myBean.addNewOrder('orderName')}
Implementierungen
- Java Expression Language (JEXL) is a library intended to facilitate the implementation of dynamic and scripting features in applications and frameworks written in Java. Latest release, Version: 3.1, 14 April 2017.
- JUEL is an open-source implementation of the Unified Expression Language (EL), specified as part of the JSP 2.1 standard (JSR-245). It is considered stable and feature complete and is licensed under the Apache License 2.0. JUEL is also suitable for use in non-JSP applications. Latest release, Version 2.2.7, 6 Feb 2014.
- Apache Commons EL is the JSP 2.0 EL interpreter from Apache. Latest release, Version 1.0, 20 Jun 2003. Download links to source and binary are broken.
Siehe auch
- OGNL – Eine quelloffene EL die von WebWork (und Struts2) verwendet wird.
- MVEL – Eine quelloffene EL die in vielen Java-basierten Projekten verwendet wird.
- SpEL – Spring Expression Language, eine quelloffene EL die Teil des Spring Frameworks ist. Sie wird hauptsächlich in Projekten des Spring-Portfolio verwendet, aber da sie technikunabhängig ist, könnte sie auch in anderen Projekten verwendet werden.
- Ant-Flaka - Intended to simplify Ant build scripts with the help of EL.
- CEL – An open source EL developed by Google.
References
- ↑ Archived copy. Archiviert vom am 27. September 2013; abgerufen am 24. September 2013.
Externe Verweise
- JSR 245: JavaServer Pages 2.1
- Unified Expression Language (article at Sun Developer Network (SDN)
- Expression Language
- Unified Expression Language for JSP and JSF (article at java.net)
[[Kategorie:Skriptsprache]] [[Kategorie:Java (Programmiersprache)]] [[Kategorie:Wikipedia:Seite mit ungeprüften Übersetzungen]]