一,運算式語言:Expression Language 產生動態內容的簡潔方式。
1,JSP2.0最重要的二項特徵:JSP文法定義定製標籤和運算式語言。
2,為了計算和輸出儲存在標準位置的java對象的值。
* 文法簡單有效。
* 條件輸出。
* 精確訪問儲存物件。
* bean屬性的簡略使用。
* 對集合元素的簡單訪問。
* 對請求參數,cookie和其他請求資料的簡單訪問。
* 自動類型轉換。
* 空值取代錯誤訊息。
* 應該將運算式語言的運算子用在表示邏輯(表示資料)的簡單任務中,避免在商業邏輯(建立並且處理資料)中使用,將商業邏輯放在java類中。
3,EL運算式文法:
${ 運算式 }
* 可以在模板文本,自訂和標準動作標籤中使用。但不能在指令碼中使用。
4,操作符
[] (數組記法 )或. (點號記法)操作符:用來訪問資料。
算術操作符
關係操作符
邏輯操作符
Empty操作符:檢測值是否為null或empty。
條件操作符
括弧操作符
5,數組記法 [] 和點號記法.:
* 數組記法允許在請求期間計算屬性名稱,括弧內的值可以是變數。允許使用不能成為合法屬性名稱的值在訪問結合和請求前序中有用。
二,阻止運算式語言的使用
1,停用整個web應用中的運算式語言。
使用servlet2.3或更早版本的web.xml檔案,則JSP2.0運算式語言自動在web應用中停用。
2,停用多個jsp頁面中的運算式語言。
使用web.xml中的jsp-property-group元素來指定相應的頁面。
<jsp-config>
<jsp-property-group>
<url-pattern>JSP頁面相對路徑</url-pattern>
<el-ignored>true或false</el-ignored>
</jsp-property-group>
</jsp-config>
3,停用個別頁面中的運算式語言。
使用page指令的isELEnabled屬性。只能在jsp1.2中使用。
4,停用運算式語言的個別語句。
將$替換為$.如果JSP2.0頁面即使用運算式語言又含有${字元,使用/${來輸出${。
三,阻止標準指令碼元素的使用。
使用jsp-property-group元素的scripting-invalid子項目來強制執行這項約束。
<jsp-config>
<jsp-property-group>
<url-pattern>JSP頁面相對路徑或*.jsp表所有JSP頁面被約束</url-pattern>
<scripting-invalid>true或false</scripting-invalid>
</jsp-property-group>
</jsp-config>
四,運算式中的範圍變數
* 範圍對象:
要輸出範圍中屬性的值,只需要在EL中使用屬性的名字。
EL會自動從範圍對象中按PageContext,HttpServletRequest,HttpSession,ServletContext搜尋屬性。
也可以手動使用pageScope,requestScope,sessionScope,applicationScope來指定屬性的範圍。
找到屬性會調用toString方法並返回調用結果,沒有找到返回Null 字元串而不是null或錯誤訊息。
* 請求參數:
param :等同getParameter(String name)方法。
paramValues 等同getParameterValues(String name)方法返回所有為指定參數名的值組成的數組。
* 請求前序:
header和headerValues:訪問HTTP請求前序的指定值和全部值。header.前序
* Cookie的訪問:
cookie 返回Cookie對象而不是值。需要使用Cookie類的value屬性來擷取值。cookie.userCookie.value
* 初始化參數:
initParam 對上下文初始化參數的訪問。initParam.參數名
五,javaBean與EL運算式
* 對bean屬性的訪問提供了點號記法。系統執行反射來分析對象的內在結構。給出屬性的值。
* 可以嵌套訪問屬性。
六,訪問集合
允許使用相同的方式訪問不同類型的集合:${attributeName[entryName]}
* attributeName為數組對象,entryName為下標。
* attributeName實現了List介面的對象,entryName為索引。
* attributeName實現了Map介面的對象,entryName為key。
* [entryName]中的entryName可以為變數。
七,使用函數
1,定義函數:編寫java類將方法聲明為static。
2,關聯函數:在tld中配置函數使用<function>元素
3,使用函數:${首碼:函數名(param1,param2,... ...)}