1.0 JSTL的下載
JSTL(JSP Standard Tag Library,JSP標准標簽庫)是一個不斷完善的開放源代碼的JSP標簽庫,是由apache的jakarta小組來維護的。JSTL只能運行在支持JSP1.2和Servlet2.3規范的容器上。
2.0 搭建開發環境
1. Dependencies provided by a JSP 2.1 container:
- Java 1.5 or later
- Servlet 2.5 or later
- JSP 2.1 or later
2. Additional dependencies
- The XML tag library requires Apache Xalan 2.7.1 or later
3. Add the following JARfiles to the '/WEB-INF/lib' directory of your application:
- taglibs-standard-spec-1.2.1.jar
- taglibs-standard-impl-1.2.1.jar
- taglibs-standard-jstlel-1.2.1.jar
- xalan-2.7.1.jar
- serializer-2.7.1.jar
3.0 引入對應的JSTL Tag Libraries
核心標簽庫的引入:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
4.0 核心標簽庫
4.1 <c:out>
屬性說明:
value:必須,值會輸出到頁面。可以是表達式或字符串。
escapeXml:非必須,值可以是true/false,默認是true。默認情況下以下字符原樣輸出,也就是不當html解析,如果設置為false就會轉為相應的html實體。
default:非必須,設置默認值,當value的值是null時,輸出。
示例:
<c:out value="aa"></c:out> <!-- 輸出的是aa -->
<c:out value="${aa}">bb</c:out> <!-- ${aa}不存在,返回的是null,所以 輸出的是bb,默認值也可以在標簽中間-->
<c:out value="${aa}" default="bb"/> <!-- ${aa}不存在,返回的是null,所以 輸出的是bb,-->
<c:out value="${aa}"/> <!-- ${aa}不存在,返回的是null,又沒有默認值,就輸出一個空字符串-->
<c:out value="<a href=\"#\">aa</a>" default="bb"/> <!-- <a href="#">aa</a> -->
<c:out value="<a href=\"#\">aa</a>" escapeXml="false" default="bb"/> <!-- aa -->
4.2 <c:set>
1) 給page/request/session/application內置對象的屬性賦值
<a href="page.jsp?usernaem=liSi">set標簽測試</a>
page.jsp
<c:out value="${param.usernaem}"/> <!-- 使用EL表達式接收url的傳值時,必須要加 param。輸出的是 liSi-->
<c:set var="usernaem" value="張三" scope="request"/> <!— 給在request范圍內的變量usernaem賦一個新值張三-->
<c:out value="${usernaem}"/> <!— 輸出張三 -->
說明:如果var屬性的值在request范圍內存在,那么會在request對象中創建這個屬性,並賦值。
<c:set var="aa" value="bb" scope="request"/>
<%=request.getAttribute("aa") %> <!— 輸出 bb -->
<c:out value="${aa}"/> <!— 輸出 bb -->
2) 給page/request/session/application內置對象的屬性賦值,與 1) 的區別把value屬性的值放在標簽中。
<c:set var="aa" scope="request"/>bb</c:set>
<%=request.getAttribute("aa") %> <!— 輸出 bb -->
<c:out value="${aa}"/> <!— 輸出 bb -->
3) 給javaBean屬性賦值
引入類:
<%@ page import="com.zheting.it.vo.*" %>
實例化對象:
<% Person person = new Person(); %>
修改對象的值:
<c:set property="age" target="<%= person %>" value="22"/>
<c:out value="<%= person.getAge() %>"/> <!— 輸出 22 -->
4) 給javaBean屬性賦值
引入類:
<%@ page import="com.zheting.it.vo.*" %>
實例化對象:
<%
Person person = new Person();
pageContext.setAttribute("kk", person);
%>
修改對象的值:
<c:set property="age" target="${kk}" value="22"/>
<c:out value="${kk.age}"/> <!— 輸出 22 -->
5) 給javaBean屬性賦值
<jsp:useBean id="tt" class="com.zheting.it.vo.Person" scope="page" />
<c:set property="age" target="${tt}" value="11"/>
<c:out value="${tt.age}"/> <!— 輸出 11 -->
說明:value 屬性的值可以寫在標簽體中。
4.3 <c:remove>
4.4 <c:catch>
4.5 <c:if>
var屬性用來存儲test屬性比較的結果,即true/false。
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:if test="${salary > 2000}" var="ff">
<c:out value="${ff}"/> <!— true-->
語法一只是為了得到比較結果時使用,標簽體中沒有要執行的內容。
多個條件判斷時,用and連接,注意返回false時不輸出false,輸出的是一個空字符串。
<c:if test="${salary > 2000 and salary < 5000}" var="ff">
<c:out value="${ff}"/>
<%=pageContext.getAttribute("ff") %>
附:EL表達式中的操作符:
可以判斷一個對象(如集合)或屬性為null或空字符串””。
4.6 <c:choose>
4.7 <c:forEach>
<c:forEach>可以循環的對象:
<% String[] arr = {"a","b","c","d","e","f"}; //數組 pageContext.setAttribute("arr", arr); List list = new ArrayList(); //List list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); list.add("f"); pageContext.setAttribute("list", list); Map map = new HashMap(); map.put("a", "aa"); map.put("b", "bb"); map.put("c", "cc"); map.put("d", "dd"); map.put("e", "ee"); map.put("f", "ff"); pageContext.setAttribute("map", map); %> <c:forEach var="item" items="${arr}" > <c:out value="${item}"/> </c:forEach> <br/> <c:forEach var="item" items="${list}" > <c:out value="${item}"/> </c:forEach> <br/> <c:forEach var="item" items="${map}" > <c:out value="${item.key}"/> <c:out value="${item.value}"/> <c:out value="${item}"/> </c:forEach> <br/> <c:forEach var="i" begin="1" end="100" step="5"> <c:out value="${i}"/> </c:forEach>
運行結果:
只輸出偶數:
<c:forEach var="i" begin="1" end="100" varStatus="status"> <c:if test="${status.count%2==0}"> <c:out value="${i}"/> </c:if> </c:forEach>
運行結果:
varStatus屬性詳細介紹:
varStatus屬性是實現了接口:javax.servlet.jsp.jstl.core.LoopTagStatus
c:forEach varStatus屬性
current當前這次迭代的(集合中的)項
index當前這次迭代從 0 開始的迭代索引
count當前這次迭代從 1 開始的迭代計數
first用來表明當前這輪迭代是否為第一次迭代的標志
last用來表明當前這輪迭代是否為最后一次迭代的標志
4.8 <c:forTokens>
這個標簽的作用就是把字符串按照指定的分隔符拆分,並循環。
<c:forTokens items="0aa,1bb,2cc,3dd,4ee,5ff,6gg,7kk,8mm,9nn,10zz" delims="," var="item" begin="2" end="9" varStatus="status"> <c:if test="${status.count%2==0}"> <c:out value="${item}"/> </c:if> </c:forTokens>
運行結果:
items屬性值得字符串,用delims屬性值”,”分割,從索引2開始,到索引9(包括)結束,varStrtus的屬性值中記錄循環狀態信息,其count屬性是從1開始計數的,var屬性值存儲着當前循環得到的那個值。
5.0 格式化標簽庫
5.1 <fmt:setLocale> 設置local信息
<fmt:setLocale value="zh_CN" />
<fmt:setLocale value="zh-CN" />
<fmt:setLocale value="${header['accept-language']}" />
5.2 <fmt:setBundle>綁定資源文件
<fmt:setBundle basename="com.zheting.it.resources.MessageResources"/>
5.3 <fmt:message>讀取資源文件
<fmt:message key="loginForm.uname"/>