一、 JSTL標籤庫
1.1、什麼是JSTL
Java Standard Tag Library Java標準標籤庫,一組由Sun公司已經製作好的擴展標籤庫,可以在JSP頁面直接使用。每個標籤都有它自己的功能。可以替換JSP頁面上的Java代碼。
1.2、JSTL標籤庫分類:
JSTL |
前綴 |
URI |
作用 |
核心標籤庫 |
c |
http://java.sun.com/jsp/jstl/core |
一組常用的核心標籤庫 |
國際化標籤 |
fmt |
http://java.sun.com/jsp/jstl/fmt |
用於頁面的國際化,在不同的國家顯示不同的語言 |
數據庫標籤 |
sql |
http://java.sun.com/jsp/jstl/sql |
可以直接在JSP頁面上使用標籤訪問數據庫 |
XML標籤 |
x |
http://java.sun.com/jsp/jstl/xml |
用於在JSP上解析XML |
函數標籤 |
fn |
http://java.sun.com/jsp/jstl/functions |
在頁面上使用一組字符串的函數 |
1.3、JSTL使用步驟
1.3.1. 導包jstl.jar庫
1.3.2. 在JSP頁面上使用taglib指令
<%@taglib prefix=”c” uri=” http://java.sun.com/jsp/jstl/core” %>
1.3.3. 使用標籤庫
二、 判斷標籤<c:if>
2.1作用
屬性名 |
是否支持EL |
屬性類型 |
屬 性 描 述 |
test |
true |
boolean |
用來判斷表達式是否爲真,如果爲真,則執行if標籤內的代碼 |
var |
false |
String |
將上面的test的運算結果存在這個變量名中 |
scope |
false |
String |
將上面的test的運算結果放在哪個域中 |
2.2示例:在LoginServlet中的會話添加一個用戶信息,重定向到login.jsp頁面,在login.jsp使用<c:if>進行判斷。如果當前用戶已經登錄,則顯示"歡迎您!Xxx登錄成功!",否則顯示一個登錄的鏈接。
2.3代碼
<!-- 判斷會話域中是否有user對象,如果沒有,則跳轉到login.jsp -->
<c:if test="${empty sessionScope.user }" >
<!-- 重定向 -->
<c:redirect url="/login.jsp"/>
</c:if>
歡迎您!${sessionScope.user}
三、多分支標籤
3.1作用
標籤名 |
作用 |
choose |
判斷標籤的父標籤 |
when |
多分支的判斷條件,屬性:test,類似於switch中case |
otherwise |
類似於switch中的default |
四、遍歷標籤<c:forEach>
4.1作用:
屬性名 |
是否支持EL |
屬性類型 |
屬 性 描 述 |
var |
false |
String |
指定遍歷中每個元素的變量名 |
varStatus |
false |
String |
每次循環對象的狀態,有4個屬性 |
items |
true |
任何支持的類型 |
要遍歷的集合或數組 |
begin |
true |
int |
從哪一行開始 |
end |
true |
int |
到哪一行結束 |
step |
true |
int |
步長,每次跨幾條記錄 |
4.2 varStatuus屬性
屬性 |
類型 |
含義 |
index |
int |
當前是第幾個元素,從0開始 |
count |
int |
到當前這一行一共有多少個元素了 |
first |
boolean |
如果當前是第一個元素,則返回true |
last |
boolean |
如果當前是最後一個元素,則返回true |
4.3遍歷集合
<table border="1" width="600" align="center">
<caption>學生列表</caption>
<tr>
<th>編號</th>
<th>姓名</th>
<th>年齡</th>
<th>性別</th>
</tr>
<!--
每一行是一條記錄
items: 要遍歷的集合或數組
var: 集合或數組中的每個元素
varStatus: 當前元素狀態
● index: 當前是第幾個元素,從0開始
● count: 到當前這一行一共有多少個元素了
● first: 如果當前是第一個元素,則返回true
● last: 如果當前是最後一個元素,則返回true
begin: 從哪一行開始,從0開始
end: 到哪一行結束
step: 步長,跨幾步
-->
<c:forEach items="${requestScope.students}" var="stu" varStatus="row" >
<!-- 三元運算,如果爲0,則輸出style這句話,否則什麼也不輸出 -->
<tr ${row.count % 2 == 0 ? "style='background-color: lightgreen'":""}>
<td>${row.count}</td>
<td>${stu.name}</td>
<td>${stu.age}</td>
<!-- 字符串可以用單引號或雙引號 -->
<td>${stu.male?"男":"女"}</td>
</tr>
</c:forEach>
</table>
數據放在作用域中,如果不放在作用域中可以使用JSP表達式
遍歷數組:
<%
int [] arr = {44,12,5,1,2,3};
pageContext.setAttribute("arr", arr);
%>
<br/>
<c:forEach items="${arr}" var="num">
${num} <br/>
</c:forEach>
4.5遍歷Map:
<%
/創建一個Map
HashMap<String, String> map = new HashMap<String, String>();
map.put("n1", "潘金蓮");
map.put("n2", "小喬");
map.put("n3", "孫悟空");
//放在請求域中
request.setAttribute("map", map);
%>
<hr/>
遍歷Map
<br/>
<c:forEach items="${map}" var="entry">
${entry.key } -> ${entry.value} <br/>
</c:forEach>
4.6類似於Java中for循環的用法
<hr/>
從1到100
<br/>
<c:forEach begin="1" end="100" var="i" step="2">
${i} <br/>
</c:forEach>