EL表達式

EL的語法很簡單,他最大的特點就是使用上很方便
例:
${sessionScope.user.sex}
所有EL都是以 ${ 爲起始、以} 爲結尾的。
上述EL範例的意思是:從Session取得用戶的性別。如果使用之前JSP代碼的寫法如下:
<%
User user = (User)session.getAttribute("user");
String sex = user.getSex( );
%>
兩者相比較之下,可以發現EL的語法比傳統JSP代碼更爲方便、簡潔。 EL提供 . 和 [ ] 兩種運算符來存取數據,[ ]可以訪問集合或者是數組的元素、Bean的屬性。下列兩者所代表的意思是一樣的,但是需要保證要取得對象的那個的屬性有相應的setXxx()和getXxx()方法才行。 例:
${sessionScope.user.sex}
等於
${sessionScope.user["sex"]} . 和 [ ] 也可以同時混合使用,如下:
${sessionScope.shoppingCart[0].price}
返回結果爲shoppingCart中第一項物品的價格。 在EL中,字符串既可以使用"abc",可以使用'abc'。 EL運算符 EL的算術運算符和Java中的運算符的大致相同,優先級也相同。 注意:'+' 運算符不會連接字符串了,他只用於加法運算。 EL關係運算符有以下六個運算符 關係運算符      說明                範例             結果
= = 或 eq   |    等於   |${ 5 = = 5 } 或 ${ 5 eq 5 } | true
!= 或 ne    |   不等於 |${ 5 != 5 } 或 ${ 5 ne 5 } | false
< 或 lt     |   小於    |${ 3 < 5 }或 ${ 3 lt 5 }    | true
> 或 gt     |   大於    |${ 3 > 5 }或 ${ 3 gt 5 }    | false
<= 或 le    | 小於等於 |${ 3 <= 5 }或 ${ 3 le 5 }   | true
>= 或 ge    | 大於等於 |${ 3 >= 5 }或 ${ 3 ge 5 }   | false empty運算符 Empty運算符主要用來判斷值是否爲null或空的,例如:
${ empty param.name }
接下來說明Empty運算符的規則:
{empty} A
   如果A爲null時,返回true
   如果A不存在時,返回true
   如果A爲空字符串時,返回true
   如果A爲空數組時,返回true
   如果A爲空的Map時,返回true
   如果A爲空的Collection時,返回true
   否則,返回false 注意:
在使用EL關係運算符時,不能夠寫成:
${param.password1} = = ${param.password2}
或者
${ ${param.password1 } = = ${ param.password2 } }
而應寫成
${ param.password1 = = param.password2 } 使用EL從表單中取得數據 與輸入有關的隱含對象有兩個:param和paramValues,它們是EL中比較特別的隱含對象。一般而言,我們在取得用戶的請求參數時,可以利用下列方法:
request.getParameter(String name)
request.getParameterValues(String name) 在EL中則可以使用param和paramValues兩者來取得數據。
${param.name}
${paramValues.name}可以取得所有同名參數的值
${paramValues.hobbies[0]}可以通過指定下標來訪問特定的參數的值 這裏param的功能和request.getParameter(String name)相同,而paramValues和request.getParameterValues(String name)相同。如果用戶填了一個form,form名稱有爲username的文本框,則我們就可以使用${param.username}來取得用戶填入文本框的值。 EL函數 EL中使用函數要寫一個要使用到方法的類,然後在配置xxx.tld文件,然後在JSP中使用時和JSP的自定義標籤相似。 xxx.tld中的配置 <function>
<name>reverse</name><!--函數名-->
<function-class>jsp2.examples.el.Functions</function-class><!--函數所在的類-->
<function-signature>java.lang.String reverse( java.lang.String )</function-signature>
<!--函數原型,也就是函數的返回值類型,函數名,參數表,注意一定要寫類型的全名-->
</function> 使用EL函數的寫法
${sn:upper('abc')} 注意:在定義EL函數時,都必須爲公開靜態(public static) EL的隱含對象 EL也可以使用內置對象中設置的屬性,需要使用特定的EL內置對象 屬性範圍     |    在EL中的對象
Page         |     pageScope
Request      |     requestScope
Session      |     sessionScope
Application |     applicationScope EL中使用內置對象的屬性
${requestScope.user}
等價於
<%request.getAttribute("user")%>
如果不寫出特定的範圍 ,那就會在不同的範圍間進行搜索了
例:{user}(user是在request範圍 request.setAttribute("user",user))
也就等於
${requestScope.user}
<%request.getAttribute("user")%>
EL的隱含對象    對象                        類型                  說 明
PageContext      | javax.servlet.ServletContext |表示此JSP的PageContext
-----------------------------------------------------------------------------------
PageScope        |         java.util.Map         |取得Page範圍的屬性名稱所對應的值
-------------------------------------------------------------------------------------
RequestScope     |         java.util.Map         |取得Request範圍的屬性名稱所對應的值
-------------------------------------------------------------------------------------
sessionScope     |         java.util.Map         |取得Session範圍的屬性名稱所對應的值
-------------------------------------------------------------------------------------
applicationScope |         java.util.Map         |取得Application範圍的屬稱所對應的值
-------------------------------------------------------------------------------------
param            |         java.util.Map         |如同ServletRequest.getParameter(String                      |                               |name)返回String類型的值
----------------------------------------------------------------------------------------
paramValues      |         java.util.Map         |如同ServletRequest.getParameterValues                       |                               |(String name)。返回String []類型的值
-----------------------------------------------------------------------------------------
header           |         java.util.Map         |如同ServletRequest.getHeader(String name)                   |                               |返回String類型的值
------------------------------------------------------------------------------------------
headerValues     |         java.util.Map         |如同ServletRequest.getHeaders(String name)                  |                               |。返回String []類型的值
------------------------------------------------------------------------------------------
cookie           |         java.util.Map         |如同HttpServletRequest.getCookies( )
------------------------------------------------------------------------------------------
initParam        |         java.util.Map         |如同ServletContext.getInitParameter(String                  |                               |name)。返回String類型的值
------------------------------------------------------------------------------------------- cookie對象 所謂的cookie是一個小小的文本文件,它是以key、value的方式將Session Tracking的內容記錄在這個文本文件內,這個文本文件通常存在於瀏覽器的暫存區內。JSTL並沒有提供設定cookie的動作,因爲這個動作通常都是後端開發者必須去做的事情,而不是交給前端的開發者。如果我們在cookie中設定一個名稱爲userCountry的值,那麼可以使用${cookie.userCountry}來取得它。 header和headerValues(請求報頭對象) header儲存用戶瀏覽器和服務端用來溝通的數據,當用戶要求服務端的網頁時,會送出一個記載要求信息的標頭文件,例如:用戶瀏覽器的版本、用戶計算機所設定的區域等其他相關數據。如果要取得用戶瀏覽器的版本,即${header["User-Agent"]}。另外在很少機會下,有可能同一標頭名稱擁有不同的值,此時必須改爲使用headerValues來取得這些值。
注意:因爲User-Agent中包含“-”這個特殊字符,所以必須使用“[]”,而不能寫成${header.User-Agent}。 initParam 就像其他屬性一樣,我們可以自行設定web應用的環境參數(Context),當我們想取得這些參數時,可以使用initParam隱含對象去取得它,例如:當我們在web.xml中設定如下: <?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<context-param>
     <param-name>userid</param-name>
     <param-value>mike</param-value>
</context-param>
</web-app>
那麼我們就可以直接使用 ${initParam.userid}來取得名稱爲userid,其值爲mike的參數。下面是之前的做法:String userid = (String)application.getInitParameter("userid"); pageContext對象 我們可以使用 ${pageContext}來取得其他有關用戶要求或頁面的詳細信息。下面列出了幾個比較常用的部分。 Expression                                說 明
${pageContext.request}                  |取得請求對象
${pageContext.session}                  |取得session對象 
${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}|取得主機端的服務信息
JSTL(JSP標準標籤庫) JSTL由核心標籤,<c:... > ,xml解析標籤 <x:...>,國際化標籤 <fmt:....>,數據庫訪問標籤<sql:...>,函數標籤<fn:...> 核心標籤
Core
< prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 屬性設置
<c:set> 設置屬性
<c:remove> 移除設置的屬性 過程控制 <c:if test="..."> 條件標籤只有在test屬性的值爲true是纔會執行標籤體
例:
<c:if test="${!(empty user.age)}">
      <h1>hello</h1>
</c:if>
 
<c:choose>choose和when是組合在一起使用的,有點類似於swith case的語法 。
<c:when test="...">when也是條件判斷標籤,test屬性的值爲true是纔會執行標籤體。
例:
<c:choose>
<c:when test="${param.age<18}">
   <h1>you is a child<h1>
</c:when>
<c:when test="${param.age>18 and param.age<50 }">
    <h1>you is a young person</h1>
</c:when>
<c:when test="${param.age>50}">
     <h1>you is a old person</h1>
</c:when>
</c:choose> <c:forEach>迭代標籤
例:
<c:forEach var="book" item="${store.books}" varStatus="status">
    <h1>${book.parice}</h1>
</c:forEach>
<c:forEach begin="1" end="5" step="1">
     <h1>hello</h1>
</c:forEach> <c:forTokens>字符串迭代標籤 <c:import>引入標籤
<c:import url="引入內容的url" var="別名">
${別名} <c:url>url標籤
<c:url value="...">
<c:param name="..." value="..."/>
</c:url>
<c:url value="...">
使用url標籤可以實現URL回寫 <c:redirect uri="xxx/xxx/xxx.xx"/> 國際化標籤
<fmt:lauguage>
<fmt:bundel>資源指定標籤
<fmt:message>消息標籤
例:
<fmt:setLocale value="zh"/>
<fmt:bundel basename="message.MessageResources">
<fmt:message>name</fmt:message>
</fmt:bundel> xxxx.properties
name=\0060\0700\
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章