-
-
EL表達式用於代替JSP表達式(<%= %>)在頁面中做輸出操作。
-
EL表達式出現的目的是爲了使JSP寫起來更加簡單,讓jsp的代碼更佳簡化。
-
EL表達式僅僅用來讀取數據,而不能對數據進行修改。
-
${標識符}
-
-
第二點:EL表達式在域對象中搜索屬性的順序是pageContext,request,session,application
-
獲取域中的對象可以直接使用對象名,這時按照從小到大的順序依次向上查找。如獲取域中名字爲user的對象
-
${user}
-
-
獲取對象的屬性值可以直接通過“對象.屬性名”
-
-
-
比如:如果獲取name屬性值,那麼該對象中必定要存在一個getName()方法。
-
-
獲取對象的屬性也可以通過“對象[“屬性名”]”
-
-
-
${map.key}
-
${map[key]}
-
-
在指定域中獲取屬性
-
在EL表達式中如果我們直接使用屬性名如:${user},它將會在四個域中由小到大依次查找。順序:pageScope、requestScope、sessionScope、applicationScope。
-
也可以指定從哪個域中獲取:
-
${ pageScope .user}:當前頁面
-
${requestScope.user}:當前請求
-
${sessionScope.user}:當前會話
-
-
-
說 明 | 範 例 | 結果 | |
---|---|---|---|
+ | 加法 | ${ 12 + 18 } | 30 |
- | 減法 | ${ 18 - 8 } | 10 |
* | 乘法 | ${ 12 * 12 } | 144 |
/ 或div | 除法 | ${ 144 / 12 } 或 ${ 144 div 12 } | 12 |
% 或mod | 取模 | ${ 144 % 10 } 或 ${ 144 mod 10 } |
說 明 | 範 例 | 結果 | |
---|---|---|---|
== 或 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 } |
說 明 | 範 例 | 結果 | |
---|---|---|---|
&& 或 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 } |
-
對象爲null時,返回true
-
如果是空的字符串,返回true
-
如果是空的Object數組(Object數組.length == 0),返回true
-
空的集合,返回true
-
空的map,返回
${ 表達式1 ? 表達式2 : 表達式3 }
-
-
[] 中括號,可以獲取順序集合中指定索引的元素,也可以獲取特殊key的值。
-
當我們在map對象中存放一些特殊的key的時候,比如說,key字符串中含有 “.” 、“+” 、“-” 、“*” 、“/” 、 “%” 等 這些運算符的時候,會讓el解析器產生歧義的時候。我們可以使用[‘key’]中括號加引號包含key的形式取值。
-
類型 | 說明 | |
---|---|---|
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中< |
-
-
請求域主要用於獲取域對象中的屬性,四個對象分別對應四個請求域。
-
pageScope
-
requestScope
-
sessionScope
-
applicationScope
-
-
-
請求參數
-
參數對象主要用於獲取get或post請求中的參數。
-
param:獲取指定的請求參數, 如:${param.username},與jsp中request.getParameter()作用一致。
-
-
-
${ user.username } // 獲取user對象中。username屬性值
${ list[下標] } // 訪問有序集合(或數組)中給定索引的元素
${ map.key } // 訪問map集合中指定key的屬性值
${ map[“key”] } // 訪問特殊字符串的key的屬性值
一定要記住一點,EL表達式獲取數據的時候,是通過對應的get方法獲取的 BeanUtils 是通過set方法設置值
-
-
常用的功能獲取
-
協議
-
服務器ip
-
服務器端口
-
獲取工程路徑
-
獲取請求方法
-
獲取客戶端ip地址
-
-
-
-
但是在實際項目中爲了縮短代碼量,會把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 = ${ cookie.JSESSIONID.value } <br/> 上下文參數:${ initParam.username }<br/> </body>