一JSP EL語言定義
E L(Expression Language) 目的為了使JSP寫起來更加簡單
表達式語言的靈感來自於 ECMAScript 和 XPath 表達式語言它提供了在 JSP 中簡化表達式的方法它是一種簡單的語言基於可用的命名空間(PageContext 屬性)嵌套屬性和對集合操作符(算術型關系型和邏輯型)的訪問符映射到 Java 類中靜態方法的可擴展函數以及一組隱式對象
EL 提供了在 JSP 腳本編制元素范圍外使用運行時表達式的功能腳本編制元素是指頁面中能夠用於在 JSP 文件中嵌入 Java 代碼的元素它們通常用於對象操作以及執行那些影響所生成內容的計算JSP 將 EL 表達式添加為一種腳本編制元素
二JSP EL簡介
語法結構
${expression}
[ ]與運算符
EL 提供““和“[ ]“兩種運算符來存取數據
當要存取的屬性名稱中包含一些特殊字符如或?等並非字母或數字的符號就一定要使用“[ ]“例如
${userMyName}應當改為${user["MyName"] }
如果要動態取值時就可以用“[ ]“來做而““無法做到動態取值例如
${sessionScopeuser[data]}中data 是一個變量
變量
EL存取變量數據的方法很簡單例如${username}它的意思是取出某一范圍中名稱為username的變量
因為我們並沒有指定哪一個范圍的username所以它會依序從PageRequestSessionApplication范圍查找
假如途中找到username就直接回傳不再繼續找下去但是假如全部的范圍都沒有找到時就回傳null
屬性范圍在EL中的名稱
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope
二JSP EL 中的有效表達式
有效表達式可以包含文字操作符變量(對象引用)和函數調用我們將分別了解這些有效表達式中的每一種
文字
JSP 表達式語言定義可在表達式中使用的以下文字
文字 文字的值
Boolean
true 和 false
Integer
與 Java 類似可以包含任何正數或負數例如
Floating Point
與 Java 類似可以包含任何正的或負的浮點數例如 E
String
任何由單引號或雙引號限定的字符串對於單引號雙引號和反斜槓使用反斜槓字符作為轉義序列必須注意如果在字符串兩端使用雙引號則單引號不需要轉義
Null null
操作符
JSP 表達式語言提供以下操作符其中大部分是 Java 中常用的操作符
術語 定義
算術型
+(二元)*/div%mod(一元)
邏輯型
and&&or||!not
關系型
==eq!=negt<=le>=ge可以與其他值進行比較或與布爾型字符串型整型或浮點型文字進行比較
空
空操作符是前綴操作可用於確定值是否為空
條件型 A ?B :C根據 A 賦值的結果來賦值 B 或 C
隱式對象
JSP 表達式語言定義了一組隱式對象其中許多對象在 JSP scriplet 和表達式中可用
pageContext
JSP 頁的上下文它可以用於訪問 JSP 隱式對象如請求響應會話輸出servletContext 等例如${pageContextresponse} 為頁面的響應對象賦值
此外還提供幾個隱式對象允許對以下對象進行簡易訪問
術語 定義
param
將請求參數名稱映射到單個字符串參數值(通過調用 ServletRequestgetParameter (String name) 獲得)getParameter (String) 方法返回帶有特定名稱的參數表達式 $(paramname) 相當於 requestgetParameter (name)
paramValues
將請求參數名稱映射到一個數值數組(通過調用 ServletRequestgetParameter (String name) 獲得)它與 param 隱式對象非常類似但它檢索一個字符串數組而不是單個值表達式 ${paramvaluesname) 相當於 requestgetParamterValues(name)
header
將請求頭名稱映射到單個字符串頭值(通過調用 ServletRequestgetHeader(String name) 獲得)表達式 ${headername} 相當於 requestgetHeader(name)
headerValues
將請求頭名稱映射到一個數值數組(通過調用 ServletRequestgetHeaders(String) 獲得)它與頭隱式對象非常類似表達式 ${headerValuesname} 相當於 requestgetHeaderValues(name)
cookie 將 cookie 名稱映射到單個 cookie 對象向服務器發出的客戶端請求可以獲得一個或多個 cookie表達式 ${cookienamevalue} 返回帶有特定名稱的第一個 cookie 值如果請求包含多個同名的 cookie則應該使用 ${headerValuesname} 表達式 initParam 將上下文初始化參數名稱映射到單個值(通過調用 ServletContextgetInitparameter(String name) 獲得)
除了上述兩種類型的隱式對象之外還有些對象允許訪問多種范圍的變量如 Web 上下文會話請求頁面
術語 定義
pageScope
將頁面范圍的變量名稱映射到其值例如EL 表達式可以使用 ${pageScopeobjectName} 訪問一個 JSP 中頁面范圍的對象還可以使用 ${pageScopeobjectNameattributeName} 訪問對象的屬性
requestScope
將請求范圍的變量名稱映射到其值該對象允許訪問請求對象的屬性例如EL 表達式可以使用 ${requestScopeobjectName} 訪問一個 JSP 請求范圍的對象還可以使用 ${requestScopeobjectNameattributeName} 訪問對象的屬性
sessionScope
將會話范圍的變量名稱映射到其值該對象允許訪問會話對象的屬性例如
$sessionScopename}
applicationScope
將應用程序范圍的變量名稱映射到其值該隱式對象允許訪問應用程序范圍的對象
三特別強調
注意當表達式根據名稱引用這些對象之一時返回的是相應的對象而不是相應的屬性例如即使現有的 pageContext 屬性包含某些其他值${pageContext} 也返回 PageContext 對象
注意 表示是否禁用EL語言TRUE表示禁止FALSE表示不禁止JSP中默認的啟用EL語言
四舉例說明
例如
< %=requestgetParameter(“username”)% > 等價於 ${ paramusername }
例如但是下面的那句EL語言可以完成如果得到一個username為空則不顯示null而是不顯示值
等價於 ${useraddr}
例如
等價於$ { requestScopeuserlist }
例如原理如上例
${ sessionScopeuserlist }
${ sessionScopeuserlist }
${ applicationScopeuserlist }
${ pageScopeuserlist }
${uselist} 含義執行順序為
“”後面的只是一個字符串並不是真正的內置對象不能調用對象
例如
等價於 ${useraddr}
第一句前面的user為一個變量
第二句後面user必須為在某一個范圍裡的屬性
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20010.html