JSP與EL表示式
EL表示式作用:
1.主要用於獲取資料物件或變數值
EL表示式主要用於替代JSP頁面的指令碼表示式(<%=expression%),以從各種型別的web域中檢索java物件2.在JSP頁面執行一些基本關係運算、邏輯運算和算術運算
3.獲取web開發常用物件
EL表示式定義了一些隱式物件,利用這些隱式物件,可以輕鬆獲得對web常用物件(JSP九大內建物件)的引用
4.呼叫Java方法
EL表示式允許使用者自定義EL函式,以在JSP頁面中通過EL表示式呼叫Java類的方法
EL自定義函式開發與應用的3個步驟:
1.編寫一個Java類的靜態方法
2.編寫標籤庫描述(tld)檔案,在tld檔案中描述自定義函式
3.在JSP頁面匯入和使用自定義函式
在JSP頁面中可以使用形如${識別符號}的形式,預設通知JSP引擎呼叫pageContext(jsp內建的九大物件之一,封裝了其它八大物件).findAttribute()方法,以識別符號為關鍵字從各個域物件(即page-》request-》session-》application從小範圍往大範圍找)中獲取資料物件。如果所有域物件中不存在識別符號所對應的資料物件,則返回結果為""(注意,不是null)
EL表示式格式:
用美元符號"$"定界,內容包括在一對花括號"{}"中;注意${}裡面不能再巢狀${}即EL表示式不能相互巢狀
即${表示式}
在EL表示式中,取一個物件的屬性 點語法(.)和中括號[]語法是通用的
如:${user.sex} ${user["sex"]}
[]還可以用來進行集合元素的定位
如:${booklist[0].price} 即${booklist[0]["price"]}
[]還可以用來動態的取值
如:${user[param]};//param是一個變數
EL表示式自帶的11大物件:EL表示式語言中定義了11個隱含物件,使用這些隱含物件可以更方便地獲取web開發中的一些常見物件,並讀取這些物件的資料。
語法:${隱式物件名稱}:獲得物件的引用
序號 隱含物件名稱 描 述
1 pageContext 即JSP九大內建物件中的pageContext物件(注意:取的是pageContext物件。) 該物件存在的重要意義:分裝了JSP九大內建物件中的其它八大物件,即可以通過該物件獲取其它8大物件
2 pageScope 代表page域中用於儲存屬性的Map集合物件
3 requestScope 代表request域中用於儲存屬性的Map集合物件
4 sessionScope 代表session域中用於儲存屬性的Map集合物件
5 applicationScope 代表application域中用於儲存屬性的Map集合物件 Notice這四個只是儲存鍵值對的集合型別的物件
6 param 表示一個儲存了所有請求引數的Map集合物件
至少應該包含兩個Map物件:URL請求引數Map物件和Request物件設定的屬性Map物件
7 paramValues 表示一個儲存了所有請求引數的Map集合物件;對於某個請求引數,返回的是一個string[]
8 header 表示一個儲存了所有http請求頭欄位的Map集合物件,注意:如果頭裡面有“-” ,例Accept-Encoding,則要header[“Accept-Encoding”]
9 headerValues 表示一個儲存了所有http請求頭欄位的Map集合物件,它對於某個請求引數,返回的是一個string[]陣列。注意:如果頭裡面有“-” ,例Accept-Encoding,則要headerValues[“Accept-Encoding”]
10 cookie 表示一個儲存了所有cookie的Map集合物件
11 initParam 表示一個儲存了所有web應用初始化引數的map集合物件
EL表示式支援大部分Java所提供的算術和邏輯操作符:
操作符 描述
. 訪問一個Bean屬性或者一個對映條目
[] 訪問一個數組或者連結串列的元素
........
關係運算符:==(或eq)、!=(或ne)、<=(或le)、>=。。。。。。。
驗證運算子:empty 不為NULL返回true 為NUll返回false
EL自動型別轉換
非EL時我們需要這樣寫;
String str_count=request.getParameter("count");
int count=Integer.parseInt(str_count);//手動轉換型別
count=count+20;
EL會進行自動型別轉換
${param.count+20}
在頁面中使用JSTL標籤的兩個步驟:
1、匯入jstl.jar和standerd.jar這兩個JSTLdejia檔案
2、在JSP頁面中使用<%@ tablid url="" prifix="" %>匯入標籤庫
EL表示式配合JSTL的使用:
--EL表示式經常與JSTL配合使用,使JSP頁面更直觀,寫法更簡單
--普通寫法: <%=session.getValue("name")%>
--EL表示式寫法: <c:out value="${sessionScope.name}/>"
JSTL核心標籤分類:
1.表示式控制標籤:out、set、remove、catch、
2.流程控制標籤:if、choose、when、otherwise
3.迴圈標籤:forEach、forTokens
4.URL操作標籤:import、url、redirect、param
具體:
<c:out/>功能與JSP傳統的<%=表示式%>或 <% out.println(“字串”)%>很類似,用於輸出常量值或變數值 變數值用EL表示式獲取
<c:set/>功能1:存值到scope(即page、request、session、application)中
<c:set value="today" var="day" scope="session"></c:set>
<c:out value="${day}"></c:out>
或
<c:set var="age" scope="session">eleven</c:set>
<c:out value="${age}"></c:out>
功能2:存值到JavaBean中 如果指定了target屬性(指明目標Bean),那麼property屬性(指明該Bean的屬性)也需要被指定。當然這裡必須指定洛
<jsp:usebean id="person" scope="session"/>//設定JavaBean
<c:set target="${sessionScope.person}" property="name" value="lihao"></c:set>
<c:out value="${sessionScope.person.name}"></c:out>
<c:remove/>移除指定域的資料物件
<c:catch/>功能與Java程式中的try{}catch{}語句功能很類似
<c:catch var="error">//將錯誤資訊儲存到error變數中
<c:set target="aa" property="bb"/>bbbb</c:set>//為一個不存在的JavaBean物件設定屬性值
</c:catch>
<c:out value="${error}"/>
<c:if test="" var="" scope=""/>與程式中的if作用相同,用來實現分支條件控制
test屬性用來存放判斷條件,一般用EL表示式來編寫
var指定存放結果true或false的變數名稱,結果為true則執行標籤體 預設結果為false
scope指定用來指定var的存放範圍 預設page
<c:choose>、<c:when>、<c:otherwise>這三個標籤一般組合起來使用 相當於switch case default條件分支結構
<c:forEach>:用於對一個集合物件中的元素進行迭代操作
屬性名 作用
var 指定將當前迭代到的元素儲存到page這個域中的屬性名稱
varstatus 記住了當前是第幾次迭代
items 將要迭代的集合物件
begin
end
step 步長
<c:param>標籤可以巢狀在<c:import>、<c:url>、<c:redirect>標籤內,為這些標籤所使用的URL地址附加引數
<c:param>標籤再為一個URL地址附加引數時,將自動對引數值進行URL編碼;例如 如果附加的引數值為“中國”,則將其轉換為
"%d6%d0%b9%fa"後再附加到URL地址後面,這就是使用<c:param>標籤的最大好處
示例:<c:param name="" value=""/>
<c:url>標籤用於在JSP頁面中構造一個URL地址,其主要目的是為了實現URL重寫。所謂的URL重寫就是將回話識別符號
以引數形式附加到URL地址後面
屬性名 是否支援EL 作用
value true
var false
scope false 指定將構造出的URL儲存到哪個web作用域