統一表達式語言

Java統一表達式語言(英語:Unified Expression Language,簡稱JUEL)是一種特殊用途的程式語言,主要在Java Web應用程式用於將表達式嵌入到web頁面。Java規範制定者和Java Web領域技術專家小組制定了統一的表達式語言。JUEL最初包含在JSP 2.1規範JSR-245中,後來成為Java EE 7的一部分,改在JSR-341中定義。

歷史

表達式語言是以JSTL(JavaServer Pages Standard Tag Library,JSP標準標籤庫)的一部分出現的,原本被叫做SPEL(Simplest Possible Expression Language,簡單的表達式語言),後來被稱作EL(Expression Language,表達式語言)。它是一種腳本語言,允許通過JSP訪問Java組件(JavaBeans)。自JSP 2.0以來,表達式語言已經被內置到JSP標籤中,用於從JSP中分離Java代碼,並允許(比用Java代碼)更方便訪問Java組件。

經過發展,表達式語言包含了更多的高級功能,並被包括在JSP 2.0規範內。對於有很少或幾乎沒有Java知識的網頁內容設計者而言,腳本的編寫變得更簡單了。表達式語言使JSP變成了真正意義上的腳本語言。在表達式語言出現之前,JSP包含了一些特定的標籤,Java代碼直接的寫在這些標籤里[1]。有了表達式語言,網頁內容設計者只需明白如何做出適當的Java方法調用,而無需編寫Java代碼。

EL在語法和語義上類似於JavaScript表達式:

  • 無需類型轉換;轉換通常是隱式的完成
  • 雙引號和單引號用法相同
  • object.propertyobject['property']的意義相同

EL也解放了程式設計師,讓程式設計師訪問object.property時,不必清楚在訪問值時涉及的細節。[2]

JSP 2.0標準制定期間,JavaServer Faces標準的發佈也需要一個表達式語言,但在JSP 2.0規範中定義的表達式語言不足以滿足JSF技術發展的需要。最突出的限制是表達式是被立即執行的。同時,JSF組件還需要一種途徑,來調用伺服器端對象的方法。因而一個更強大的語言被制定出來,並具備以下新特性:

  • 延期執行的表達式
  • 表達式既可以設定數據,也可以獲得數據
  • 可以調用方法的方法表達式

新的表達式語言符合JSF的需求,但JSP EL和JSF EL之間並不兼容。統一表達式語言計劃因此啟動。在JSP 2.1中,JSP 2.0和JSF 1.1的表達式語言已經合併成一個統一表達式語言[3](EL 2.1)。

EL 3.0在JSR-341頁面存檔備份,存於互聯網檔案館)中從JSP和JSF規範中獨立。新版本添加了一些新的特性,尤其是與Java 8的Streams和Lambda表達式相關的特性。[4]

示例

下面是統一表達式語言的一個簡單的例子:使用JSTL中「c:out」標籤:

<c:out value="${myBean.myField}" />

調用一個參數的方法的表達式:

${myBean.addNewOrder('orderName')}

實現

參見

參考文獻

  1. ^ 例如scriptlet英語scriptlet「<% %>」,表達式「<%= %>」,等等。
  2. ^ 根據object的不同,object.property可能意味着object.get("property")object.getProperty("property")object.getProperty()等。
  3. ^ Scott Moore. Java EE 5:强大的功能、高生产率和低复杂性. IBM developerWorks. [2014-04-11]. (原始內容存檔於2015-09-20). 
  4. ^ Standard Deviation: An Illustration of Expression Language 3.0 in Servlet Environment. (原始內容存檔於2013-09-27). 

外部連結