1)el:即爲表達式語言。java
2)格式:${ ...}session
3)做用:用來獲取jsp四大做用域對象中的屬性值並顯示[賦值]在jsp的節點上。它實質上就是 <%= 表達式 %> 簡潔式。另外, 它還能夠獲取 實 體內容。同時,能夠實現表達式的計算與判斷。app
底層利用的反射機制:jsp
A)能夠利用以下方式直接進行屬性的訪問,優化
格式:對象.屬性。例若有一個user對象。取裏面的age屬性。url
就能夠表達爲${user.age}; 能夠進行判斷後自動根據真假取值:${dog.sex? ’公’:’母’}spa
注意:age等書寫的方式必定的第一個單詞的首字母小寫而後遵循駝峯型格式。orm
B)獲取容器中的值使用容器.key獲取其中的value。對象
C)從JSP的四大做用域對象中獲取屬性的值。索引
pageContext ----> pageScope ${pageScope.屬性名} 或 ${屬性名}
request ----> requestScope ${requestScope.屬性名} 或 ${屬性名}
session ----> sessionScope ${sessionScope.屬性名} 或 ${屬性名}
application ----> applicationScope ${applicationScope.屬性名} 或 ${屬性名}
注意: 當不寫 XXXScope 前綴時,而直接 ${屬性名} 去獲取四大做用域中的值,則會從小到大去找,找到,則結束。即做用域越小優先級越高;
D)從JSP的請求實體中獲取參數的值:
param ----> ${param.參數名}
paramValues ---> ${paramValues.參數名[索引號] } 或 ${paramValues.參數名['索引號']
E)EL表達式中能夠進行運算。
算術運算, 關係運算, 邏輯運算:
關係運算 ${ "5" > 3 }獲得結果爲true;
注意: 在運算前,若數據類型不一致,則會發生類型的自動轉換。 如: ${'123' + 100};
注意: EL 表達式中不能進行字符串的鏈接運算。 ${"Beijing" + 2008} //報錯
4)特有的運算符。
A) . 和 [] ;//此處.爲成員運算符;[]爲偏移運算符號;
EL爲了獲取實體內容。爲此,提供了專門的關鍵字 param 或 paramValues
例如: 早期, 獲取請求時的實體內容: <%= request.getParameter("uname") %>
如今, 獲取請求時的實體內容: ${param.uname}
早期, 獲取請求時的同名不一樣值的實體內容中:
<%
String[] favs = request.getParameterValues("fav");
for(int i = 0; i < favs.length; i++ ){
out.print( favs[i] + " ");
}
%>
如今, 獲取請求時的同名不一樣值的實體內容中
[其中第一個參數是]: ${paramValues.fav[0] }
[第二個參數是: ] ${paramValues.fav['1'] }
b) empty 判斷運算符
當屬性值爲空值,EL中如何判斷?
案例以下:
<%
//String name = null;
String name = "";
request.setAttribute("name", name);
Map<String,Integer> dogs = new HashMap<String,Integer>();
session.setAttribute("dogs", dogs);
Set<String> cats = new TreeSet<String>();
List<String> cars = new LinkedList<String>();
pageContext.setAttribute("cats", cats);
pageContext.setAttribute("cars", cars);
%>
在EL表達式中,對屬性值進行空值判斷
例如: 對request對象的name屬性值進行判斷,其結果爲: ${ empty requestScope.name}
例如: 對session對象的dogs屬性值進行判斷,其結果爲: ${ empty sessionScope.dogs } ----- ${empty dogs }
例如: 對pageContext對象的cats屬性值進行判斷,其結果爲: ${ empty cats }
例如: 對pageContext對象的cars屬性值進行判斷,其結果爲: ${ empty cars }
特別注意: EL表達式中的變量必須是 四大做用域的屬性或請求實體中的參數。
它是 JSP 的標準標籤庫。
它主要是將 java的流程控制語句簡化或優化成一個 JSP頁面上可直接使用的標籤。
格式:
<c:標籤>
輸出的信息
</c:標籤>
注意: 在使用 JSTL標籤以前,必須在JSP頁面使用 taglib 指令將用到的標籤庫導入過來。
<%@ taglib prefix="前綴" uri="標籤庫的地址及庫名" %> 。。。//通常前綴使用字母c。
a) http://java.sun.com/jstl/core_rt 核心標籤庫
---> [ <c:if> | <c:choose><c:when><c:otherwise> | <c:forEach> ]
另外瞭解: <c:url> | <c:param> | <c:import> | <c:redirect>
而 請求轉發:<jsp:forward page=」 xxx.jsp」> </jsp:forward> 形式稱之爲JSP的頁面元素或頁面標籤,它是JSP內置的。
重定向<c:redirect url=」xxx.jsp 」></c:redirect>
b) http://java.sun.com/jstl/fmt_rt 格式化標籤 --->[ <fmt:formatDate> | <fmt:formatNumber> ]
a) 形式一
<c:if test="${條件表達式}" var="存放結果的變量">
結果表現體
</c:if>
b) 形式二
<c:if test="${條件表達式 }" var="存放結果的變量" scope="做用域對象">
結果表現體
</c:if>
注意: 在JSP的 jstl標籤庫中 <c:if>只是單向的,沒有雙向的。 那問: 如何實現雙向的if語句功能?
例如:
<c:if test=」${dog.sex==true}」> 公</c:if>
<c:if test=」${dog.sex==false}」> 母</c:if>
<c:choose>
<c:when test="${條件表達式}"> 結果表現體 </c:when>
<c:when test="${條件表達式}"> 結果表現體 </c:when>
......
<c:otherwise> 結果表現體 </c:otherwise>
</c:choose>
a) 形式一
<c:forEach begin="起始值" end="終止值" var="存放每次循環的結果變量">
${表示式 }
</c:forEach>
注意: 它至關於java中的標準for循環語句 for(int i=1; i<=10; i++) { ... }
b) 形式二
<c:forEach begin="起始值" end="終止值" var="存放每次循環的結果變量" step="增量" >
${表示式 }
</c:forEach>
注意: 它至關於java中的標準for循環語句 for(int i=1; i<=10; i+=增量) { ... }
c) 形式三
<c:forEach items="${容器}" var="存放每次循環的值" varStatus="狀態變量">
結果表現體
</c:forEach>
注意: 狀態變量中有一個 index 屬性,表示每種狀態的索引號。
注意: 這種形式最經常使用。
例如: 如有 List<Person> ps = new ArrayList<Person>();
則對 List 的 ps 容器進行遍歷以下:<br/>
<c:forEach items="${ps}" var="person" varStatus="id">
${id.index + 1} ---- ${person.name} --- ${person.sex ? "男":"女" } --- ${person.age } <br/>
</c:forEach>
1、日期的格式化:
1) 固有格式:
<fmt:formatDate value="${d1 }" type="date" dateStyle="short"/> <br/>
其中 type="date" 時, 有: dateStyle="short"/"long"/"full"
2) 自定義格式
<fmt:formatDate value="${d1 }" pattern="yyyy-MM-dd"/> <br/>
<fmt:formatDate value="${d1 }" pattern="||^_^yyyy年MM月dd日^_^||"/> <br/>
2、時間的格式化:
1) 固有格式:
<fmt:formatDate value="${d1 }" type="time" dateStyle="short"/> <br/>
其中 type="time" 時, 有: dateStyle="short"/"long"/"full"
2) 自定義格式:
<fmt:formatDate value="${d1 }" pattern="HH:mm:ss"/> <br/>
<fmt:formatDate value="${d1 }" pattern="北京時間>>>HH時mm分ss秒"/> <br/>
3、格式化數值型數據
<fmt:formatNumber value="${data }" pattern="########.##" /> <br/>
<fmt:formatNumber value="${data }" pattern="##,###,###.##" /> <br/>
<fmt:formatNumber value="${data }" pattern="##,###,###" /> <br/>
<fmt:formatNumber value="${data }" pattern="##,###,###.0" /> <br/>
<fmt:formatNumber value="${data }" pattern="00,000,000.0" /> <br/>
<fmt:formatNumber value="${data }" pattern="$00,000,000.0" /> <br/>
<fmt:formatNumber value="${data }" pattern="¥00,000,000.0" />
1)存放對象(javaBean)的容器
在<c:forEach>中能夠直接經過EL訪問屬性
Obj.getXXX()--->${obj.屬性}
2)存放Map容器的List容器
在<c:forEach>中能夠直接經過EL去訪問屬性;
Map.get(key)------>${map.key}