JSP中的EL表達式和JSTL標籤庫
一丶EL表達式
EL表達式概念
在JSP開發中,爲了獲取Servlet域對象中存儲的數據,經常需要些許多Java代碼,這樣會使得JSP頁面混亂,難以維護,因此,在JSP2.0規範提供了EL表達式.EL(Expression Language),它是一種簡單的數據訪問語言.
什麼是EL
EL目的是使JSP寫起來更加的簡單,表達式語言靈感來源於ECMAScript和XPath表達式語言,它讓JSP的代碼更加簡便.
EL語法:${表達式}
EL的使用
內置對象:
①作用域
內置對象名稱:pageScope ,page作用域
內置對象名稱:requestScope ,request作用域
內置對象名稱:sessionScope ,session作用域
內置對象名稱:applicationScope ,application作用域(servletContext)
②請求參數
param:獲得一個參數
paramValues:獲取一組參數
③請求頭
header:獲得一個請求頭
headerValues:獲取一組請求頭
④JSP上下文對象
pageContext
⑤全局初始化參數
initParam
⑥cookie
cookie
EL的使用
EL的使用:獲取數據
①自定義的數據,必須放在作用域中
代碼描述:
①獲得字符串
<!--設置傳入不同域中的參數-->
<%
pageContext.setAttribute("name", "pname");
request.setAttribute("name", "rname");
session.setAttribute("name", "sname");
application.setAttribute("name", "aname");
%>
<!-- 獲取 -->
<h2>獲取不同域中數據:</h2>
${pageScope.name }<br/>
${requestScope.name }<br/>
${sessionScope.name }<br/>
${applicationScope.name }
顯示效果:
②獲得數組
<h2>獲取數組</h2>
<%
String[] str2 = {"abc","cde","fgh","hij"};
pageContext.setAttribute("str22", str2);
%>
${str22 }<br/>
${str22[2] }
顯示效果:
③獲得List數據
<h2>獲取List集合</h2>
<%
List<String> list = new ArrayList<String>();
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
pageContext.setAttribute("list1", list);
%>
${list1 }<br/>
${list1[2] }
顯示效果:
④獲得Map<String,String>數據
<%
Map<String,String> map = new HashMap<String,String>();
map.put("demo01", "ok01");
map.put("demo02", "ok02");
map.put("demo03", "ok03");
map.put("demo04", "ok04");
pageContext.setAttribute("map01", map);
%>
${map01}<br/>
${map01.demo01 }<br/>
顯示效果:
⑤獲得Map<String,User>數據
<%
Map<String,User> map = new HashMap<String,User>();
map.put("user01", new User("張三","123"));
map.put("user02", new User("李四","456"));
map.put("user03", new User("王五","789"));
map.put("user04", new User("趙六","1234"));
pageContext.setAttribute("map01", map);
%>
${map01 }<br/>
${map01.user01 }<br/>
${map01.user02 }<br/>
${map01.user01.username }<br/>
${map01.user01.password }<br/>
${map01['user03'].username }
顯示效果:
EL的使用:運算符
①模擬數據
<%
pageContext.setAttribute(“num1”, 10);
pageContext.setAttribute(“num2”, 20);
pageContext.setAttribute(“num3”, 30);
pageContext.setAttribute(“num4”, 40);
%>
②算數運算符
+/-/*/除(/)div/求餘:%(mod)
<h2>算數運算符</h2>
${num1+num2 }<br/>
${num1-num2 }<br/>
${num1*num2 }<br/>
${num1/num2 }<br/><!-- div -->
${num1%num2 }<br/><!-- mod -->
顯示效果:
③關係運算符
大於:>(gt),小於:<(lt),等於:==(eq),大於等於:>=(ge);小於等於:<=(le)
<h2>關係運算符</h2>
${num1<num2 }<__________>${num1 lt num2 }<br>
${num1>num2 }<__________>${num1 gt num2 }<br>
${num1<=num2 }<__________>${num1 le num2 }<br>
${num1>=num2 }<__________>${num1 ge num2 }<br>
${num1==num2 }<__________>${num1 eq num2 }
顯示效果:
④邏輯運算符
與:&&,或:||,非:!
<h2>邏輯運算符</h2>
${num1<num2 && num2<num3 }<_________>${num1<num2 and num2<num3 }<br>
${num1<num2 || num2<num3 }<_________>${num1<num2 or num2<num3 }<br>
${!(num1<num2) }<_________>${not(num1<num2) }
顯示效果:
⑤三元運算符
${n1 < n2 ? "true" : "false"}
<h2>三元運算符</h2>
${num1>num2 ? "正確" : "錯誤" }
顯示效果:
⑥empty運算符
對象是否爲null
集合是否爲null
字符串是否爲null
代碼演示:
<%
String str08=null;
pageContext.setAttribute("demo01",str08 );
pageContext.setAttribute("userrr", new User());
Map<String,String> map02 = new HashMap<String,String>();
map02.put("zyc", "good");
pageContext.setAttribute("map02", map02);
%>
字符串:${empty domo01}<br>
對象:${empty userrr }<br>
集合:${empty map02 }<br>
<%
String str08=null;
pageContext.setAttribute("demo01",str08 );
pageContext.setAttribute("userrr", new User());
Map<String,String> map02 = new HashMap<String,String>();
map02.put("zyc", "good");
pageContext.setAttribute("map02", map02);
%>
字符串:${empty domo01}<br>
對象:${empty userrr }<br>
集合:${empty map02 }<br>
顯示效果:
二丶JSTL標籤庫
概念:
JSTL(JSP Standard Tag Library,JSP標準標籤庫)是一個不斷完善的開放源代碼的JSP標籤庫,是由apache的jakarta小組來維護的。JSTL只能運行在支持JSP1.2和Servlet2.3規範的容器上,如tomcat 4.x。在JSP 2.0中也是作爲標準支持的。
JSTL 1.0 發佈於 2002 年 6 月,由四個定製標記庫(core、format、xml 和 sql)和一對通用標記庫驗證器(ScriptFreeTLV 和 PermittedTaglibsTLV)組成。core 標記庫提供了定製操作,通過限制了作用域的變量管理數據,以及執行頁面內容的迭代和條件操作。它還提供了用來生成和操作 URL 的標記。顧名思義,format 標記庫定義了用來格式化數據(尤其是數字和日期)的操作。它還支持使用本地化資源束進行 JSP 頁面的國際化。xml 庫包含一些標記,這些標記用來操作通過 XML 表示的數據,而 sql 庫定義了用來查詢關係數據庫的操作。
JSTL包含的標籤庫
Core http://java.sun.com/jsp/jstl/core 前綴:c
118N http://java.sun.com/jsp/jstl/fmt 前綴:fmt
SQL http://java.sun.com/jsp/jstl/sql 前綴:sql
XML http://java.sun.com/jsp/jstl/xml 前綴:x
Functions http://java.sun.com/jsp/jstl/functions 前綴:fn
JSTL使用步驟:
①導包
jstl.jar
standard.jar
②引入標籤庫
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> prefix:前綴
③使用格式
<c:類型 相關參數> </c:類型>
Core標籤庫
out標籤
<c:out value="ok"></c:out> value:輸出的類容
if標籤
<h2>if標籤的使用</h2>
<!-- 進行計算${3>2},然後將值存入變量v,將變量v存放進HttpSession -->
<c:if test="${3>2 }" var="v" scope="session">
3是大於2的.
</c:if>
<hr/>
<c:set value="1" var="num" property="num"></c:set>
<c:if test="${num==1 }">
this is first login!!!
</c:if>
<hr/>
<%
User user = new User("張三","23");
pageContext.setAttribute("user", user);
%>
<c:if test="${empty user }">
您好沒有登錄,請登錄!!!
</c:if>
<c:if test="${not empty user }">
${user.username },歡迎您!!!
</c:if>
顯示效果:
test屬性用於設置邏輯表達式;
var屬性用於指定邏輯表達式中變量的名字;
scope屬性用於指定var變量的作用範圍,默認爲page.
如果test的結果爲true,那麼標籤將被執行,否則不執行
forEach標籤:
<h2>foreach標籤的使用</h2>
<%
int num = 10;
pageContext.setAttribute("num", num);
%>
<!-- begin="${num }" end="100" 從10到100 每個只賦給V,step="20"循環遍歷是每次增加20個數,
varStatus="status"狀態碼可以看變化的次數等 -->
<c:forEach begin="${num }" end="100" var="v" step="20" varStatus="status">
${status.count } ${status.first } ${status.last } ${v }<br/>
</c:forEach>
顯示效果:
var屬性用於指將當前迭代到的元素保存到page域中的名稱;
items屬性用於指定將迭代的對象;
varStatus屬性用於指定當前迭代狀態信息的對象保存到page域中的名稱;
varStatus屬性包含的相關狀態:count表示元素在集合中的序號,從1開始累加,
index表示當前元素在集合中的索引,從0開始,
first表示當前是否爲集合的第一個元素,
last表示當前是否爲集合的最後一個元素,
begin屬性指定從第幾個元素開始迭代;
end屬性指迭代到對應的值;
step屬性用於指定迭代的步長,就是每次增加的數量.