一.EL表達式
做用:EL :爲了消除jsp中的Java代碼html
1.語法java
${EL表達式}
a.EL不須要導包
b.在el中調用屬性,實際上是調用的getXxx()方法
${範圍.對象.屬性.屬性的屬性 }
${requestScope.student.address.schoolAddress }數組
2.操做符:操做:屬性,不是對象瀏覽器
. : 使用方便
[] : 若是是常量屬性,須要使用雙引號/單引號 引發來;比點操做符更增強大(能夠訪問數據,獲取變量值)session
- []強大之處:
- a.能夠容納一些 特殊符號 (. ? -)
- b.[]能夠容納 變量屬性 (能夠動態賦值)
- String x =「a」; $ {requestScope.a}等價於$ {requestScope[「a」]}等價於${requestScope[x]}
- c.能夠處理數組:${requestScope.arr[0] }
- 獲取map屬性
Map<String,Object> map = new HashMap<>();
map.put(「cn」,「中國」);
map.put(「us」,「美國」);
request.setAttrubute(「map」,map);
${requestScope.map.cn}
3.經過EL獲取JSP 九大內置對象
${pageContext }
${pageContext.request }
${pageContext.sessoin }
${pageContext.方法名去掉()和get而且將首字母小寫} //上面的就是app
4.各內置對象的做用域jsp
<%// 向page做用域存入內容 pageContext.setAttribute("name", "張三"); // 同一頁面中的信息 request.setAttribute("name", "李四"); // 一次請求有效的信息(例如servlet存入結果,jsp獲取結果) session.setAttribute("name", "王五"); // 每一個用戶(瀏覽器)獨有的信息(例如購物車信息) application.setAttribute("name", "趙六"); // 適合放全局信息(城市信息, 類別信息) %> <!-- 從page做用域獲取內容--> <%= pageContext.getAttribute("name")%> <!-- 從page做用域獲取內容(推薦) --> ${ pageScope.name} <!-- 從request做用域取--> <%= request.getAttribute("name")%> <!-- 從request做用域取(推薦)--> ${ requestScope.name} <!-- 從session做用域取值 --> <%= session.getAttribute("name")%> <!-- 從session做用域取值(推薦) --> ${ sessionScope.name} <!-- 從application做用域取值 --> <%= application.getAttribute("name")%> <!-- 從application做用域取值(推薦) --> ${ applicationScope.name} <hr/> <!-- 在el表達式取做用域變量時,不加前綴,先搜索pageScope, 再搜索requestScope, 繼續搜索sessionScope, 再搜索applicationScope--> ${ name}
二.JSTL (比EL更增強大)
- 須要引入2個jar :jstl.jar standard.jar
引入tablib :spa
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
其中prefix=「c」 :前綴.net
核心標籤庫: 通用標籤庫、條件標籤庫、 迭代標籤庫code
1.通用標籤庫
1.<c:set>賦值
i:
在某個做用域之中(4個範圍對象),給某個變量賦值
<%-- request.setAttribute(「name」, 「zhangsan」) ; --%>
<c:set var=「name」 value=「zhangsan」 scope=「request」/>
${requestScope.name }
<c:set var=「變量名」 value=「變量值」 scope=「4個範圍對象的做用域」/>
給普通對象賦值
在某個做用域之中(4個範圍對象),給某個對象的屬性複製 (此種寫法,不能指定scope屬性)
${requestScope.student.sname} //取出studen對象sname屬性值 <c:set target="${requestScope.student}" property="sname" value="zxs" />
給map對象賦值
${requestScope.countries.cn} //取出countries對象cn屬性值 <c:set target="${requestScope.countries}" property="cn" value="中國" />
<c:set target=「對象」 property=「對象的屬性」 value=「賦值」 />
注意 <c:set>能夠給不存在的變量賦值 (但不能給不存在的對象賦值)
2.<c:out>顯示
傳統EL:$ {requestScope.student }
c:out方式:<c:out value ="$ {requestScope.student }"
c:out顯示不存在的數據:<c:out value="$ {requestScope.stu}>" default=「zs-23」>
- true:<c:out value=‘百度’ default=「當value爲空的,顯示的默認值」 escapeXml=「true」 /> //將a標籤內容以文字形式顯示
- false:<c:out value=‘百度’ escapeXml=「false」 /> //顯示連接
3.<c:remove >:刪除屬性
<c:set var=「a」 value=「aaa」 scope=「request」/> //賦值
${a} // 賦值後顯示
<c:remove var=「a」 scope=「request」/> //刪除
${a} //刪除後再顯示
2.條件標籤庫
1.選擇
單重選擇
<c:if test="${6>2}" var = "result" scope="request" ></c:if>
if else if… esle if… else /switch
<c:choose> <c:when test="${requestScope.role == '老師'}"> 老師代碼 .... </c:when> <c:when test="${requestScope.role == '學生'}"> ==能夠用 eq 代替 學生代碼.... </c:when> <c:otherwise> 管理員其餘人員.... </c:otherwise> </c:choose>
3.迭代標籤庫(循環)
for(int i=0;i<5;i++)
<c:forEach var=「name」 items=" r e q u e s t S c o p e . n a m e s " > − {requestScope.names }" > - requestScope.names">−{name }-
</c:forEach>
//至關於 for(int i=0;i<5;i++) <c:forEach begin="0" end="5" step="1" varStatus="status" > ${status.index} </c:forEach> //至關於for(String str:names) <c:forEach var="name" items="${requestScope.names}"> ${name} </c:forEach> <c:forEach var="student" items="${requestScope.students }" > ${student.sname }-${student.sno } </c:forEach>