EL
-
EL(Expression Language)是JSP內置的運算式語言,用以訪問頁面的背景關系以及不同作用域中的物件 ,取得物件屬性的值,或執行簡單的運算或判斷操作,EL在得到某個資料時,會自動進行資料型別的轉換,
-
EL運算式用于代替JSP運算式(<%= %>)在頁面中做輸出操作,
-
EL運算式出現的目的是為了使JSP寫起來更加簡單,讓jsp的代碼更佳簡化,
-
EL運算式僅僅用來讀取資料,而不能對資料進行修改,
-
使用EL運算式輸出資料時,如果有則輸出資料,如果為null則什么也不輸出,
EL運算式,它能夠極大的簡化JSP頁面上資料的顯示,他就是被用來優化資料讀取操作的,
EL運算式的最主要功能就是從域物件中獲取資料,并且輸出
基本語法
EL運算式總是放在{}中,而且前邊有一個$作為前綴
${識別符號}
-
第一點:當EL運算式輸出的key不存在的時候,輸出的是空串””
-
第二點:EL運算式在域物件中搜索屬性的順序是pageContext,request,session,application
-
獲取域中的物件可以直接使用物件名,這時按照從小到大的順序依次向上查找,如獲取域中名字為user的物件
-
${user}
-
-
獲取物件的屬性值可以直接通過“物件.屬性名”
-
${user.name}
-
-
注意:這里的屬性名是get和set方法對應的屬性值,并不是物件中的變數名,
-
比如:如果獲取name屬性值,那么該物件中必定要存在一個getName()方法,
-
-
獲取物件的屬性也可以通過“物件[“屬性名”]”
-
${user[“name”]}
-
-
獲取Map中屬性時可以直接通過屬性的key
-
${map.key}
-
${map[key]}
-
-
在指定域中獲取屬性
-
在EL運算式中如果我們直接使用屬性名如:${user},它將會在四個域中由小到大依次查找,順序:pageScope、requestScope、sessionScope、applicationScope,
-
也可以指定從哪個域中獲取:
-
${ pageScope .user}:當前頁面
-
${requestScope.user}:當前請求
-
${sessionScope.user}:當前會話
-
${applicationScope.user}:當前應用
-
-
運算子
語法:${ 運算運算式 }
| 算數運算子 | 說 明 | 范 例 | 結果 |
|---|---|---|---|
| + | 加法 | ${ 12 + 18 } | 30 |
| - | 減法 | ${ 18 - 8 } | 10 |
| * | 乘法 | ${ 12 * 12 } | 144 |
| / 或div | 除法 | ${ 144 / 12 } 或 ${ 144 div 12 } | 12 |
| % 或mod | 取模 | ${ 144 % 10 } 或 ${ 144 mod 10 } | 4 |
| 關系運算子 | 說 明 | 范 例 | 結果 |
|---|---|---|---|
| == 或 eq | 等于 | ${ 5 == 5 } 或 ${ 5 eq 5 } | true |
| != 或 ne | 不等于 | ${ 5 !=5 } 或 ${ 5 ne 5 } | false |
| < 或 lt | 小于 | ${ 3 < 5 } 或 ${ 3 lt 5 } | true |
| > 或 gt | 大于 | ${ 2 > 10 } 或 ${ 2 gt 10 } | false |
| <= 或 le | 小于等于 | ${ 5 <= 12 } 或 ${ 5 le 12 } | true |
| >= 或 ge | 大于等于 | ${ 3 >= 5 } 或 ${ 3 ge 5 } | false |
| 邏輯運算子 | 說 明 | 范 例 | 結果 |
|---|---|---|---|
| && 或 and | 與運算 | ${ 12 == 12 && 12 < 11 } 或 ${ 12 == 12 and 12 < 11 } | false |
| || 或 or | 或運算 | ${ 12 == 12 || 12 < 11 } 或 ${ 12 == 12 or 12 < 11 } | true |
| ! 或 not | 取反運算 | ${ !true } 或 ${not true } | false |
empty運算子
empty運算是判斷一個物件或者集合是否為空,回傳boolean值,
-
物件為null時,回傳true
-
如果是空的字串,回傳true
-
如果是空的Object陣列(Object陣列.length == 0),回傳true
-
空的集合,回傳true
-
空的map,回傳true
三元運算子
${ 運算式1 ? 運算式2 : 運算式3 }
“.”和[]運算子
-
“.” 運算子,可以取JavaBean物件的屬性值,也可以取map中某個key的值,
-
[] 中括號,可以獲取順序集合中指定索引的元素,也可以獲取特殊key的值,
-
當我們在map物件中存放一些特殊的key的時候,比如說,key字串中含有 “.” 、“+” 、“-” 、“*” 、“/” 、 “%” 等 這些運算子的時候,會讓el決議器產生歧義的時候,我們可以使用[‘key’]中括號加引號包含key的形式取值,
-
[]中括號,可以獲取有序集合(陣列和List集合)中的給定索引的元素
11個隱含物件
這些物件可以在EL運算式中直接使用,
| 隱含物件 | 型別 | 說明 |
|---|---|---|
| pageContext | javax.servlet.jsp.PageContext | 就是JSP頁面中的pageContext物件 |
| pageScope | java.util.Map<String,Object> | Page范圍屬性名和屬性值 |
| requestScope | java.util.Map<String,Object> | Request范圍屬性名和屬性值 |
| sessionScope | java.util.Map<String,Object> | Session范圍屬性名和屬性值 |
| applicationScope | java.util.Map<String,Object> | Web應用范圍屬性名和屬性值 |
| param | java.util.Map<String,String> | 對應一個請求引數 |
| paramValues | java.util.Map<String,String[]> | 對應一組請求引數 |
| header | java.util.Map<String,String> | 請求頭 |
| headerValues | java.util.Map<String,String[]> | 請求頭回傳字符陣列 |
| cookie | java.util.Map<String, Cookie> | 獲取某個cookie物件 |
| initParam | java.util.Map<String, String> | 獲取web.xml中<context-param>初始化引數 |
-
請求域
-
請求域主要用于獲取域物件中的屬性,四個物件分別對應四個請求域,
-
pageScope
-
requestScope
-
sessionScope
-
applicationScope
-
-
-
請求引數
-
引數物件主要用于獲取get或post請求中的引數,
-
param:獲取指定的請求引數, 如:${param.username},與jsp中request.getParameter()作用一致,
-
paramValues:獲取請求引數陣列,如:${paramValues.hobby}會回傳一個string型別的陣列
-
-
獲取域資料的順序
在執行時,會用識別符號為關鍵字分別從page、request、session、application四個域中查找對應key的物件,找到則回傳相應資料,找不到則回傳空串,(注意,不是null,而是空字串)
獲取javaBean普通屬性、陣列屬性、List集合屬性,map屬性中的資料
${ user.username } // 獲取user物件中,username屬性值
${ list[下標] } // 訪問有序集合(或陣列)中給定索引的元素
${ map.key } // 訪問map集合中指定key的屬性值
${ map[“key”] } // 訪問特殊字串的key的屬性值
一定要記住一點,EL運算式獲取資料的時候,是通過對應的get方法獲取的 BeanUtils 是通過set方法設定值
pageContext訪問Jsp中內置物件
-
通過pageContext物件我們可以直接獲取jsp中的一些內置物件,比如:request物件,session物件,Servletconfig物件,ServletContext物件,然后獲取一些我們需要的資訊,
-
常用的功能獲取
-
協議
-
服務器ip
-
服務器埠
-
獲取工程路徑
-
獲取請求方法
-
獲取客戶端ip地址
-
獲取會話的id編號
-
-
工程名(背景關系路徑):${ pageContext.request.contextPath }
-
但是在實際專案中為了縮短代碼量,會把request物件放在pageContext域物件中,然后再使用,比如
<% // 先把request物件放到pageContext域物件中 pageContext.setAttribute(“req”,request); %> //然后EL運算式代碼改為 工程名(背景關系路徑):${ req.contextPath }
其他隱含物件
<body> 引數username的值:${ param.username }<br/> 引數hobby的值:${ paramValues.hobby[0] }<br/> 請求頭Accept-Language的值:${ header["Accept-Language"] }<br/> 請求頭Accept的值:${ headerValues["Accept"][0] }<br/> cookie的key = ${ cookie.JSESSIONID.name } : value = https://www.cnblogs.com/Open-ing/p/${ cookie.JSESSIONID.value } <br/> 背景關系引數:${ initParam.username }<br/> </body>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/86966.html
標籤:Html/Css
上一篇:Web基礎了解版06-Jsp-指令、標簽-九大隱式物件-四個域物件
下一篇:占位符 css
