1. EL: Expression Language
JSP 2.0 以後,EL已經正式納入成為標準規範之一。
只要支持Servlet 2.4/JSP2.0 的Container,
就可以在JSP網頁中直接使用EL了。
2. EL 語法
EL:
${sessionScope.user.sex}
JSP Scriptlet:
User user = (User)session.getAttribute("user");
String sex = user.getSex();
兩者比較,EL的語法比傳統JSP Script更方片,簡潔。
2.1 .與[]
${sessionScope.user.sex}
等於
${sessionScope.user["sex"]}
1.
當屬性名稱包含一些特殊字符,如 . 或 - 等非字母或數字的符號,就一定要使用[]
${user["My-Name"]}
2.
${sessionScope.user[data]}
data 是一個變數,假如data 的值為"sex"時-> ${sessionScope.user.sex}
假如data 的值為"name"時-> ${sessionScope.user.name}
2.2 EL變量
EL存取變量數據的方法很簡單,例如:${username}。
它的意思是取出來某一個範圍中名稱為username的變量。
默認會先從PageP範圍找,如果找不到,
再依序到Request,Session,Application範圍。
如果全部範圍都找不到時,就回傳null。
${pageScope.username} -> 取出page範圍的username變量
${requestScope.username} -> 取出request範圍的username變量
${sessionScope.username} -> 取出session範圍的username變量
${applicationScope.username} -> 取出application範圍的username變量
==>
String username = (String)session.getAttribute("username");
2.3 自動轉換類型
${param.count + 20}
==>
String str_count = request.getParameter("count");
int count = Integer.parseInt(str_count);
count = count + 20;
注意:param.count 的值是 null 或 "" 的結果
2.4 EL保留字
and eq gt true
or ne le false
no lt ge null
instanceof empty div mod
避免上述的名字,以免程式編譯時發生錯誤。
3. EL Implicit Object(EL 隱含物件)
- 與範圍有關的隱含物件
applicationScope -> 從服務器一開始執行服務,到服務器關閉為止
sessionScope -> 用戶持續在服務器連接的時間。
requestScope -> 從一個JSP網頁請求到另一個JSP網頁請求之間,隨後此屬性就失效了。
pageScope -> 單單一頁JSP Page的範圍(Scope)。
- 與輸入有關的隱含物件
param
paramValues
- 其他隱含物件
cookie
header
headerValues
initParam
pageContext
3.2 與輸入有關的隱含物件
${param.name}
${paramValues.name}
==>
request.getParameter(String name)
request.getParameterValues(String name)
例:Param.html 傳信息到Param.jsp
3.3 其他隱含物件
- cookie
${cookie.userCountry}
- header 和 headerValues
${header["User-Agent"]} ,不能寫成${header.User-Agent}
- initParam
如果要取WEB站台的環境參數時,可以使initParam隱含物件
當web.xml裡
<context-param>
<param-name>userid</param-name>
<param-value>mike</param-value>
</context-param>
取值:
${initParam.userid}
==>
String userid = (String)application.getInitParameter("userid");
- pageContext
${pageContext.request.queryString}取得請求的參數字符串
${pageContext.request.requestURL}取得請求的URL,但不包含請求之參數字符串
${pageContext.request.contextPath}服務的web application的名稱
${pageContext.request.method}取得HTTP的方法(GET,POST)
${pageContext.request.protocol}取得使用協議(HTTP/1.1,HTTP/1.0)
${pageContext.request.remoteUser}取得用戶名稱
${pageContext.request.remoteAddr}取得用戶的IP地址
${pageContext.session.new}判斷session是否為新的,所謂新的session,表示剛由server產生而client尚未使用
${pageContext.session.id}取得session的ID
${pageContext.servletContext.serverInfo} 取得主機端的服務信息
備註:
${}前有 \ 的話,JSP 就不當成EL來執行
4. EL算術運算符
+ 加,例:${17+5} -> 22
- 減,例:${17-5} -> 12
* 乘,例:${17*5} -> 85
/ 或 div 除,例:${17/5} -> 3
% 或 mod 餘數,例:${17%5} -> 2
5. EL關係運算符
== 或 eq 等於 例:${5 == 5} -> true
!= 或 ne 不等於 例:${5 != 5} -> false
< 或 lt 小於 例:${3 < 5} -> true
> 或 gt 大於 例:${3 gt 5} -> false
<= 或 le 小於等於 例:${3 <= 5} -> true
>= 或 ge 大於等於 例:${3 >= 5} -> false
6. EL邏輯運算符
&& 或 and 等於 例:${A && B} -> true/false
|| 或 or 不等於 例:${A || B} -> true/false
! 或 not 小於 例:${!A} -> true/false
7. EL其他運算符
7.1 empty 運算符:用來判斷值是否為null或空
例:${empty param.name}
7.2 條件運算符
例:${A ? B : C}
7.3 掛號運算符
例:${A*(B*C)}
運算符優先權
[],.
()
-(負),not,!,empty
*,/,div,%,mod
+,-(減)
<,>,<=,>=,lt,gt,le,ge
==,!=,eq,ne
&&,and
||,or
$(A ? B : C )
8.EL functions
再介紹自定義EL的函數(function)>
EL functions 的語法如下:
ns:function(arg1,arg2)
其中ns為前置名稱(prefix),它必須和taglib指令的前置名稱一樣。
<% @ taglib prefix="my"
uri="http://jakarta.apache.org/tomcat/jsp2-example-taglib" %>
...
${my:function(param.name)}
JSP 2.0 以後,EL已經正式納入成為標準規範之一。
只要支持Servlet 2.4/JSP2.0 的Container,
就可以在JSP網頁中直接使用EL了。
2. EL 語法
EL:
${sessionScope.user.sex}
JSP Scriptlet:
User user = (User)session.getAttribute("user");
String sex = user.getSex();
兩者比較,EL的語法比傳統JSP Script更方片,簡潔。
2.1 .與[]
${sessionScope.user.sex}
等於
${sessionScope.user["sex"]}
1.
當屬性名稱包含一些特殊字符,如 . 或 - 等非字母或數字的符號,就一定要使用[]
${user["My-Name"]}
2.
${sessionScope.user[data]}
data 是一個變數,假如data 的值為"sex"時-> ${sessionScope.user.sex}
假如data 的值為"name"時-> ${sessionScope.user.name}
2.2 EL變量
EL存取變量數據的方法很簡單,例如:${username}。
它的意思是取出來某一個範圍中名稱為username的變量。
默認會先從PageP範圍找,如果找不到,
再依序到Request,Session,Application範圍。
如果全部範圍都找不到時,就回傳null。
${pageScope.username} -> 取出page範圍的username變量
${requestScope.username} -> 取出request範圍的username變量
${sessionScope.username} -> 取出session範圍的username變量
${applicationScope.username} -> 取出application範圍的username變量
==>
String username = (String)session.getAttribute("username");
2.3 自動轉換類型
${param.count + 20}
==>
String str_count = request.getParameter("count");
int count = Integer.parseInt(str_count);
count = count + 20;
注意:param.count 的值是 null 或 "" 的結果
2.4 EL保留字
and eq gt true
or ne le false
no lt ge null
instanceof empty div mod
避免上述的名字,以免程式編譯時發生錯誤。
3. EL Implicit Object(EL 隱含物件)
- 與範圍有關的隱含物件
applicationScope -> 從服務器一開始執行服務,到服務器關閉為止
sessionScope -> 用戶持續在服務器連接的時間。
requestScope -> 從一個JSP網頁請求到另一個JSP網頁請求之間,隨後此屬性就失效了。
pageScope -> 單單一頁JSP Page的範圍(Scope)。
- 與輸入有關的隱含物件
param
paramValues
- 其他隱含物件
cookie
header
headerValues
initParam
pageContext
3.2 與輸入有關的隱含物件
${param.name}
${paramValues.name}
==>
request.getParameter(String name)
request.getParameterValues(String name)
例:Param.html 傳信息到Param.jsp
3.3 其他隱含物件
- cookie
${cookie.userCountry}
- header 和 headerValues
${header["User-Agent"]} ,不能寫成${header.User-Agent}
- initParam
如果要取WEB站台的環境參數時,可以使initParam隱含物件
當web.xml裡
<context-param>
<param-name>userid</param-name>
<param-value>mike</param-value>
</context-param>
取值:
${initParam.userid}
==>
String userid = (String)application.getInitParameter("userid");
- pageContext
${pageContext.request.queryString}取得請求的參數字符串
${pageContext.request.requestURL}取得請求的URL,但不包含請求之參數字符串
${pageContext.request.contextPath}服務的web application的名稱
${pageContext.request.method}取得HTTP的方法(GET,POST)
${pageContext.request.protocol}取得使用協議(HTTP/1.1,HTTP/1.0)
${pageContext.request.remoteUser}取得用戶名稱
${pageContext.request.remoteAddr}取得用戶的IP地址
${pageContext.session.new}判斷session是否為新的,所謂新的session,表示剛由server產生而client尚未使用
${pageContext.session.id}取得session的ID
${pageContext.servletContext.serverInfo} 取得主機端的服務信息
備註:
${}前有 \ 的話,JSP 就不當成EL來執行
4. EL算術運算符
+ 加,例:${17+5} -> 22
- 減,例:${17-5} -> 12
* 乘,例:${17*5} -> 85
/ 或 div 除,例:${17/5} -> 3
% 或 mod 餘數,例:${17%5} -> 2
5. EL關係運算符
== 或 eq 等於 例:${5 == 5} -> true
!= 或 ne 不等於 例:${5 != 5} -> false
< 或 lt 小於 例:${3 < 5} -> true
> 或 gt 大於 例:${3 gt 5} -> false
<= 或 le 小於等於 例:${3 <= 5} -> true
>= 或 ge 大於等於 例:${3 >= 5} -> false
6. EL邏輯運算符
&& 或 and 等於 例:${A && B} -> true/false
|| 或 or 不等於 例:${A || B} -> true/false
! 或 not 小於 例:${!A} -> true/false
7. EL其他運算符
7.1 empty 運算符:用來判斷值是否為null或空
例:${empty param.name}
7.2 條件運算符
例:${A ? B : C}
7.3 掛號運算符
例:${A*(B*C)}
運算符優先權
[],.
()
-(負),not,!,empty
*,/,div,%,mod
+,-(減)
<,>,<=,>=,lt,gt,le,ge
==,!=,eq,ne
&&,and
||,or
$(A ? B : C )
8.EL functions
再介紹自定義EL的函數(function)>
EL functions 的語法如下:
ns:function(arg1,arg2)
其中ns為前置名稱(prefix),它必須和taglib指令的前置名稱一樣。
<% @ taglib prefix="my"
uri="http://jakarta.apache.org/tomcat/jsp2-example-taglib" %>
...
${my:function(param.name)}