全稱:Expression Language.一種寫法很是簡潔的表達式。語法簡單易懂,便於使用。表達式語言的靈感來自於ECMAScript和XPath表達式語言。java
做用:讓jsp書寫起來更加的方便。簡化在jsp中獲取做用域或者請求數據的寫法。也會搭配Jstl來進行使用。express
語法結構:${expression}:提供 . 和 [] 兩種運算符來存取數據。apache
使用: 數組
${param.鍵名}獲取請求實體中一個鍵一個值的數據瀏覽器
${paramValues.鍵名}獲取請求實體中同鍵不一樣值的數據,返回的是String數組,可使用角標直接獲取 例如:愛好tomcat
${header}返回所欲的請求數據,鍵值對形式cookie
${header['鍵名']}返回指定的鍵的請求頭數據session
${headerValues[‘鍵名’]}app
${cookie}獲取全部cookie對象 鍵值對eclipse
${cookie.Cookie對象的鍵名} 獲取了指定cookie數據的cookie對象
${cookie.Cookie對象的鍵名.name}獲取存儲了指定cookie數據的cookie對象的存儲的鍵
${cookie.Cookie對象的域名.value}獲取存儲了指定cookie數據的cookie對象存儲的值
做用域對象:pageContext request session application
獲取做用域數據:咱們使用setAttribute方法存儲的數據
獲取:
普通字符串數據 ${鍵名}
對象數據 ${鍵名.屬性名}
集合數據
list集合 ${鍵名[角標]}
Map集合 ${map集合做用域鍵名。map集合存儲的數據的鍵名}
做用域查找順序: 若是找到了則再也不查找,若是找不到,則繼續查找下一個做用域,若是四個做用域中都沒有則什麼都不顯示。
pageContext---->request---->session--->application
指定做用域取數據:
${pageScope.鍵名} 指明獲取pagecontext做用域中的數據
${requestScope.鍵名}指明獲取request做用域中的數據
${sessionScope.鍵名}指明獲取session做用域中的數據
${applicationScope.鍵名}指明獲取application做用域中的數據
${cookie.user.username}
算術運算:+ - * / 在EL表達式中能夠直接進行算術運算
關係運算: && || !
${邏輯表達式}
注意:沒有單&單|
比較運算:== != >, >=, <,<=
${比較表達式}
三目運算符:
${條件?值:值}
${empty 鍵名}
做用:
判斷該鍵是否存儲有效數據。
<%@ page language="java" import="java.util.*,wq.pojo.*" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- 將流轉數據顯示到瀏覽器中,使用傳統的方式 --> <%=request.getAttribute("str")%><br> <%=((User)request.getAttribute("user")).getFav()%><br> <%=((ArrayList)request.getAttribute("list")).get(2)%><br> <%=((User)((ArrayList)request.getAttribute("list")).get(3)).getFav()%><br> <%=((HashMap)request.getAttribute("hs")).get("b1")%><br> <%=((User)((HashMap)request.getAttribute("hs")).get("c1")).getFav()%> <hr> ${str}<br> ${user.fav}<br> ${list[2]}<br> ${list[3].fav}<br> ${hs.b1}<br> ${hs.u.fav}<br> <hr> <h3>獲取請求實體數據(請求實體)</h3> <%=request.getParameter("uname")%>---${param.uname}<br> <%=request.getParameterValues("fav")[1]%>--${paramValues.fav[1]}<br> <%=request.getHeader("User-Agent")%>---${header["User-Agent"]}--${headerValues["Accept-Language"][0]}<br> <h3>獲取cookie數據</h3> ${cookie}<br> ${cookie.name}<br> ${cookie.JSESSINI.name}--${cookie.JSESSIONID.value} <h3>EL獲取做用域數據時做用域的查找順序</h3> <% pageContext.setAttribute("hello", "hello pageContext"); request.setAttribute("hello","hello rquest"); session.setAttribute("hello", "hello session"); application.setAttribute("hello", "hello application"); %> ${requestScope.hello}--${a} <h3>EL表達式的邏輯運算</h3> <% request.setAttribute("a", "2"); %> ${1+2}---${2*3}--${a+3}---${1+"5"} ${2>3&&4<5}---&{2>3||4<5}--${!(2>3)} ${2==2}---${3>2}<br> ${2>3?"男":"女"} <h3>EL表達式的empty</h3> <% request.setAttribute("str", ""); User u=new User(); request.setAttribute("name", u); ArrayList la=new ArrayList(); request.setAttribute("la", la); %> ${empty str}<br> ${u}<br> ${la}<br>
i.導包
ii.使用taglib標籤引入資源
iii.核心標籤庫。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
內容:
out標籤:<c:out value="${表達式}" default="默認值" ></c:out>
做用:結合EL表達式將數據響應給瀏覽器。若是EL表達式沒有取到數據則可使用default屬性聲明默認值。
set標籤: <c:set value="數據" var="鍵名" scope="做用域名"></c:set>
做用:將數據存儲到指定的做用域中,默認值pageContext做用域
remove標籤:<c:remove var="要刪除數據的鍵名" scope="做用域名"/>
做用:刪除做用域中的數據,默認是刪除四個做用域中符合要求的數據。
可是能夠經過scope屬性指明要刪除的做用域數據
注意:
使用pageContext.removeAttribute("鍵名"); 此方法將四個做用域中符合的數據都會刪除
使用pageContext.removeAttribute(String name,int scope);
使用request.removeAttribute("鍵名"); 刪除當前做用域中符合要求的數據
使用session.removeAttribute("鍵名"); 刪除當前做用域中符合要求的數據
使用application.removeAttribute("鍵名");刪除當前做用域中符合要求的數據
邏輯標籤:
單分支判斷標籤:<c:If test="${表達式}">數據</c:if>
做用:能夠根據el表達式進行必定程度的單分支邏輯判斷。
注意:
test屬性中書寫的是EL表達式,或者說是EL表達式。
該標籤只能進行EL表達式相關的邏輯判斷,不能進行EL表達式不能獲取的數據的邏輯處理。
多分支判斷標籤:
<c:hoose>
<c:when test="${表達式}"><c:when>
<c:when test=" ${表達式}"><c:when>
..
<c:otherwise></c:otherwise>
注意:
符合條件後執行一個分支,其餘分支不會執行。
循環標籤:
<c:foreach>
循環體
</c:foreach>
屬性:
begin:聲明循環的開始位置
end:聲明循環的結束位置
step:聲明循環的步長
varStatus:聲明變量記錄循環狀態,例如變量:i
注意:記錄的數據存儲到做用域中能夠直接使用EL表達式進行獲取
實例:${i.index} 獲取當次循環的下標
${i.count} 獲取當次循環的次數
${i.first} 判斷是否第一次循環
${i.last}判斷是不是最後一次循環
items:聲明要遍歷的數據,能夠是集合和數組等
注意:要使用EL表達式來獲取
var:聲明變量記錄每次遍歷的結果。能夠作循環體中使用EL表達式獲取遍歷出來的數據。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% request.setAttribute("str", "jstl"); %> <%request.setAttribute("str1","jstl學習");%> -----------${str1} --------------<c:out value="${str2}" default="404"></c:out> <hr> <!-- set標籤學習 --> <% request.setAttribute("s1", "set標籤學習"); %> <c:set value="set標籤學習2" var="s2" scope="request"></c:set> <c:set value="hello pageContext" var="hello" scope="page"></c:set> <c:set value="hello request" var="hello" scope="request"></c:set> <c:set value="hello session" var="hello" scope="session"></c:set> <c:set value="hello application" var="hello" scope="application"></c:set> ${s1}---${requestScope.s2}---${pageScope.hello} <br> ${hello} <hr> <!-- remove標籤學習 --> <%-- <c:out value="${hello}"></c:out> --%> <% pageContext.removeAttribute("hello"); request.removeAttribute("hello"); %> ${pageScope.hello} ${hello} <hr> <!-- 單分支判斷標籤 --> <c:set var="a" value="12"></c:set> <% int a=Integer.parseInt((String)pageContext.getAttribute("a")); if(a>8){ %> <b>今每天氣真好,適合學習1</b> <% } %> <c:if test="${a>8}"> <b>今每天氣真好,適合學習2</b> </c:if> <hr> <!-- 多分枝邏輯判斷 --> <c:set var="scope" value="100"></c:set> <c:choose> <c:when test="${scope>=90}"> <i>蘋果</i> </c:when> <c:when test="${scope>=70&&score<80}"> <i>蘋果</i> </c:when> <c:when test="${scope>=80&&scope<70}"></c:when> <c:otherwise> <i>男女混合雙打</i> </c:otherwise> </c:choose> <br> <hr> <!-- 循環標籤 --> <c:forEach begin="0" end="5" step="1" varStatus="i"> <c:if test="${i.count==3}"> <u>我是第三次循環</u> </c:if> 111111-${i.index}--${i.count}---${i.first}---${i.last}<br> </c:forEach> <!-- 循環標籤遍歷集合 --> <% //建立測試數據list ArrayList<String> list=new ArrayList<String>(); list.add("蘋果"); list.add("榴蓮"); list.add("荔枝"); request.setAttribute("list", list); %> <c:forEach items="${list}" var="s" varStatus="i"> ${s}--${i.index}---${i.count}<br> </c:forEach> <!-- 遍歷map集合 --> <% //聲明map集合測試數據 HashMap<String,String> hs=new HashMap<String,String>(); hs.put("s1", "唱歌"); hs.put("s2", "跳舞"); hs.put("s3", "敲代碼"); //將數據存儲到做用域中 request.setAttribute("hs", hs); %> <c:forEach items="${hs}" var="s"> ${s.key}---${s.value}<br> </c:forEach>