一加缘、EL表達(dá)式(Expression language)
1.EL表達(dá)式的語法:
${表達(dá)式},例如: ${list}
注意:
自帶響應(yīng)功能
2.EL表達(dá)式的使用:
1.EL表達(dá)式獲取請求數(shù)據(jù)
獲取用戶請求數(shù)據(jù)(請求實體)
${param.鍵名} 獲取請求實體中一個鍵一個值的數(shù)據(jù)
${paramValues.鍵名} 獲取請求實體中同鍵不同值的數(shù)據(jù),返回的是String數(shù)組,可以使用角標(biāo)直接獲取
2.獲取請求頭數(shù)據(jù)
${header} 返回所有請求的數(shù)據(jù)乓诽,鍵值對形式
${header["鍵名"]} 返回指定的鍵的請求數(shù)據(jù)
${headerValues["鍵名"]}
3.獲取Cookie數(shù)據(jù)
${Cookie} 獲取所有的Cookie鍵值對 對象
${Cookie.Cookie對象的鍵名} 獲取存儲了指定Cookie數(shù)據(jù)的Cookie對象
${Cookie.Cookie對象的鍵名.name} 獲取存儲了指定Cookie數(shù)據(jù)的Cookie對象的存儲的鍵
${Cookie.Cookie對象的鍵名.value} 獲取存儲了指定Cookie數(shù)據(jù)的Cookie對象的存儲的值
3.EL表達(dá)式獲取作用域數(shù)據(jù)
1.作用域?qū)ο螅?pageContext request session application
2.作用域數(shù)據(jù):我們使用setAttribute方法存儲的數(shù)據(jù)
3.獲认釉椤:
普通的字符串?dāng)?shù)據(jù):${鍵名}
對象數(shù)據(jù):${鍵名.屬性名}
EL表達(dá)式獲取作用域?qū)ο髷?shù)據(jù)
<br />
<%
User user = new User();
user.setUid(1);
user.setUname("zhangsan");
user.setAge(1);
user.setFav("看電影");
request.setAttribute("user", user);
? %>
${user }<br />${user.uid}<br /> ${user.uname}<br />
獲取對象屬性的值${對象名.屬性名 }晴裹,本質(zhì)調(diào)用了該屬性的getter方法
集合數(shù)據(jù):
list集合${鍵名[角標(biāo)]}
<%
List list = new ArrayList();
list.add("list1");
list.add("list2");
request.setAttribute("list", list);
%>
${list}<br />
${list[0]}
list集合${鍵名[角標(biāo)]}
Map集合${map集合作用域存儲的鍵名.map集合存儲的數(shù)據(jù)的鍵名}
4.作用域查找順序,
pageContext
request
session
application
如果找到了則不再查找拍冠,如果找不到尿这,則繼續(xù)查找下一個作用域,如果四個都沒有找到則什么都不表示
5.指定作用域的獲取
${pageScope.鍵名} 指定了獲取pageContext作用域中的數(shù)據(jù)
${requestScope.鍵名} 指定了獲取requestContext作用域中的數(shù)據(jù)
${sessionScope.鍵名} 指定了獲取sessionContext作用域中的數(shù)據(jù)
${applicationScope.鍵名} 指定了獲取applicationContext作用域中的數(shù)據(jù)
? ? ? ? ? ? ? ? <%
? pageContext.setAttribute("str", "hello,pageContext");
? request.setAttribute("str", "hello,requestContext");
? session.setAttribute("str", "hello,sessionContext");
? application.setAttribute("str", "hello,applicationContext");
? %>
? ${str}<br/>
? 從pageContext中取值:${pageScope.str};<br/>
? 從requestContext中取值:${requestScope.str};<br/>
? 從sessionContext中取值:${sessionScope.str};<br/>
? 從applicationContext中取值:${applicationScope.str};<br/>>
4.EL表達(dá)式邏輯運算
1.算術(shù)運算:
+庆杜,-射众,*,/在EL表達(dá)式中可以直接進(jìn)行算術(shù)運算
${算術(shù)表達(dá)式} 例如:${1+2}
注意:+表示算術(shù)運算晃财,不能進(jìn)行字符串連接
2.邏輯運算:&& 叨橱! ||
${邏輯表達(dá)式}
3.比較運算:== != > >= < <=
${比較表達(dá)式}
4.三目運算
${條件?值:值}
5.EL表達(dá)式的empty判斷
${empty 鍵名}
作用:
判斷該鍵是否有存儲有效數(shù)據(jù)
二断盛、JSTL標(biāo)簽庫
1罗洗、JSTL學(xué)習(xí)
作用:
在jsp頁面使用其可以非常方便的進(jìn)行數(shù)據(jù)的處理。較與使用java代碼塊方法钢猛,更加簡單伙菜,代碼更加的簡潔易讀。
使用:
核心標(biāo)簽庫
流程:
導(dǎo)入jar包
引入標(biāo)簽庫
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
內(nèi)容:
基本標(biāo)簽
out標(biāo)簽:
<c:out value="${表達(dá)式}" default="默認(rèn)值"></c:out>
作用:結(jié)合EL表達(dá)式將數(shù)據(jù)響應(yīng)給瀏覽器 命迈,如果EL表達(dá)式?jīng)]有收到數(shù)據(jù)則可以使用dafault屬性聲明默認(rèn)值仇让。
set標(biāo)簽:
<c:set value ="數(shù)據(jù)" var="鍵名" scope="作用域名"></c:set>
<%
int age=10;
request.setAttribute("age", age);
%>
等同于
<c:set value="10" var="gae" scope="request"></c:set>
作用:將數(shù)據(jù)存儲到指定的作用域中,默認(rèn)是pageContext作用域
注意:scope的值為 pag request session application
remove標(biāo)簽:
? ? ? ? <c:remove var="要刪除的鍵名" scope="作用域名"></c:remove>
作用:刪除作用域中的數(shù)據(jù)躺翻,默認(rèn)是刪除四個作用域中符合要求的數(shù)據(jù)
注意:使用pageContext.removeAttriute("鍵名")丧叽, 此方法會將四個作用域中的符合要求的數(shù)據(jù)全部刪除
使用pageContext.removeAttriute(String name,int scope)
指明要刪除的作用域中的數(shù)據(jù) scope的值為 1pageContext,2request ,3 session,4 application
使用request.removeAttibute("鍵名") 刪除當(dāng)前作用域符合要求的數(shù)據(jù)
使用session.removeAttibute("鍵名") 刪除當(dāng)前作用域符合要求的數(shù)據(jù)
使用application.removeAttibute("鍵名") 刪除當(dāng)前作用域符合要求的數(shù)據(jù)
邏輯標(biāo)簽:
單分支判斷標(biāo)簽:<c:if test="${表達(dá)式}"數(shù)據(jù)></c:if>
作用:可以根據(jù)EL表達(dá)式進(jìn)行一定程度的單分支邏輯判斷式。
注意:test屬性中書寫的是EL表達(dá)式公你,或者說是EL表達(dá)式的邏輯表達(dá)式踊淳。
該標(biāo)簽只能進(jìn)行EL表達(dá)式相關(guān)的邏輯判斷。不能進(jìn)行EL表達(dá)式不能獲取的數(shù)據(jù)的邏輯處理
? <c:set var="a" value="12"></c:set>
? <c:if test="${a>8}">
? <b>今天天氣真好陕靠,適合學(xué)習(xí)2</b>
? </c:if>
該標(biāo)簽只能進(jìn)行EL表達(dá)式相關(guān)的邏輯判斷迂尝。不能進(jìn)行EL表達(dá)式不能獲取的數(shù)據(jù)的邏輯處理
多分支判斷標(biāo)簽:
? <c:choose>
? ? <c:when test="${表達(dá)式}"></c:when>
? ? <c:when test="${表達(dá)式}"></c:when>
? ? ..
? ? <c:otherwise></c:otherwise>
? </c:choose>
實例:
<c:set value="80" var="score" scope="request"></c:set>
<c:choose>
<c:when test="${score>=90}">優(yōu)秀</c:when>
<c:when test="${score>=80 }">良好</c:when>
<c:when test="${score>=70 }">一般</c:when>
<c:when test="${score>=60 }">及格</c:when>
<c:when test="${score<80 }">不及格</c:when>
</c:choose>?
注意:符合條件后只會執(zhí)行一個分支,其他分支不會執(zhí)行剪芥。
循環(huán)標(biāo)簽:
? <c:foreach>
? ? 循環(huán)體
? </c:foreach>
實例:
<%
List<Employee> li = new ArrayList<Employee>();
li.add(new Employee(1001,"高琪",18,"程序員","30000","5000"));
li.add(new Employee(1002,"高小二",19,"講師","25000","3000"));
li.add(new Employee(1003,"高小松",20,"教授","30000","3000"));
request.setAttribute("li", li);
%>
<c:forEach? items="${li }" var="li" begin="0" end="1">
${li }<br/>
</c:forEach>
屬性:
begin:聲明循環(huán)的開始位置
end:聲明循環(huán)的結(jié)束位置
step:聲明循環(huán)的步長
varStatus:聲明變量記錄循環(huán)狀態(tài) ,例如變量名:i
注意:記錄的數(shù)據(jù)存儲到了作用域中可以直接使用El表達(dá)式進(jìn)行獲取
示例: ${i.index} 獲取當(dāng)次循環(huán)的下標(biāo)
${i.count} 獲取當(dāng)次循環(huán)的次數(shù)
${i.first} 判斷是否是第一次循環(huán)
${i.last} 判斷是否是最后一次循環(huán)
items:聲明要遍歷的數(shù)據(jù)垄开,可以是集合和數(shù)組等
注意:要使用EL表達(dá)式來獲取
var:聲明變量記錄每次遍歷的結(jié)果∷胺荆可以做循環(huán)體中使用EL表達(dá)式獲取遍歷出來的數(shù)據(jù)