JSP標準標籤庫——JSTL
JSTL是實現Web應用程式中常見的通用功能的定製標籤庫集。
JSTL分為5大類:
1、 核心標籤庫
2、 國際化/格式化標籤庫
3、 資料庫標籤庫
4、 XML標籤庫
5、 Function標籤庫(Functions)
Core標籤庫
核心標籤庫主要包括通用標籤、條件標籤、迭代標籤和與URL相關的標籤
在使用Core標籤庫的JSP的開始部分,添加代碼:%@tagliburi=”http://java.sun.com/jsp/jstl/core” prefix=”c”%
通用標籤:
• <c:out>標籤
– 用於將運算式的結果輸出到當前的JspWriter對象中。其功能類似於JSP的運算式<%= %>,或者EL運算式${}。
– 文法
<c:out value=“value” [default=“default value”] [escapeXml=“true|false”]/>
<c:out value=“value” [escapeXml=“true|false”]><!--為true時,對輸出內容中的<、>、“、‘和&字元進行轉義,分別轉成<、>、'、"和&-->
default value
</c:out>
Eg:
<%
request.setAttribute("user","lisi");
%>
<c:out value="helloworld"/><br/>
<c:out value="${userName}"default="xxxx"/><br/>
<c:out value="<h1>你好!!!</h1>" escapeXml="false"/><br/>
<c:out value="${userName}">常值內容</c:out>
• <c:set>標籤
– <c:set>標籤用於設定JSP頁面的各種域範圍中的變數,或者設定java.util.Map對象或JavaBean對象的屬性。
– 文法
• <c:set value=“value”var=“name” [scope=“範圍”]/>將value的值儲存到名為name的變數中,同時name變數儲存到選定的作用範圍中。例如,
<c:set value=“sunwk” name=“username” scope=“session”/>
範圍可以是:可以是page|request|session|application
• <c:set var=“name” [scope=“範圍”] >
value
</c:set>
將標籤體中的內容儲存到名為name的變數中,同時name變數儲存到選定的作用範圍中。例如,
<c:set var=“username” scope=“session”>
sunwk
</c:set>
• <c:set value=“value”target=“target” property=“propertyName” />將value的值儲存到target對象的propertyName屬性中。
• <c:set target=“target”property=“propertyName”>
value
</c:set>
將標籤體的內容儲存到target對象的propertyName屬性中。
Eg:
<c:set value="sunwukong"var="user" scope="request"></c:set>
${user}<br/>
<c:set var="user"scope="request">
zhubajie
</c:set>
${user }<br/>
<%
Map map=new HashMap();
request.setAttribute("map",map);
%>
<!-- 給指定範圍內的某一個集合去設定索引值對 -->
<c:set value="tangseng"property="aaa" target="${map}"></c:set>
${map.aaa }<br/>
<!-- 給javaBean裡的屬性賦值 -->
<%
Person p=new Person();
request.setAttribute("person",p);
%>
<c:set value="Jerry"property="name" target="${person}"></c:set>
${person.name}
• <c:remove>標籤
– <c:remove>標籤用於移除JSP頁面中指定域範圍中的變數。
– 文法
<c:remove var=“name” [scope=“範圍”]/>
<c:remove var="person"scope="request"/>
<c:out value="${person.name}" default="沒有該人"/>
• <c:catch>標籤
– <c:catch>標籤用於捕獲嵌套在標籤體內的內容拋出的異常對象,並將異常資訊儲存到變數中。
– 文法
<c:catch [var=“name”]>
body content
</c:catch>
將可能發生異常的代碼放到該標籤中,如果發生異常,異常資訊儲存到name變數中。
<!-- catch捕獲異常,將可能發生異常的內容放在catch中
,異常對象會以屬性的方式儲存在某個範圍中,
var是在指定範圍記憶體異常對象的內容 -->
<c:catch var="myex">
<%
int i=10/0;
%>
</c:catch>
異常:<c:out value="${myex }"></c:out><br/>
異常的原因是:<c:out value="${myex.cause}"></c:out><br/>
異常訊息:<c:out value="${myex.message}"></c:out>
異常堆棧軌跡:<c:out value="${myex.stackTrace}"></c:out>
條件標籤
• <c:if>標籤
– <c:if>標籤用來做條件判斷,功能類似於JSP中的<%if(boolean){}%>。
注意:對於判斷標籤的test屬性,可以使用一些關係操作符,如==、!=、<、>、>=、<=等,也可以將這些關係操作符用eq、ne、lt、le、gt、ge取代。
Eg:
<c:if test="${userName==null }"var="xx" scope="request">
該使用者沒有登入
</c:if>
• <c:choose>、<c:when>、<c:otherwise>標籤
– <c:choose>標籤用於提供條件選擇的上下文,它必須與<c:when>和<c:otherwise>標籤一起使用。
– <c:when>作為<c:choose>的子標籤,<c:when>有一個test屬性,該屬性的值為布爾型,如果test的值為true,則執行<c:when>標籤體的內容。
– <c:otherwise>標籤沒有屬性,它必須作為<c:choose>標籤的最後分支出現。
Eg:
<%
request.setAttribute("age",18);
%>
<c:choose>
<c:when test="${age>70}">
老年人
</c:when>
<c:when test="${age<=70&& age>35}">
中年人
</c:when>
<c:when test="${age<=35&& age>18 }">
青年人
</c:when>
<c:when test="${age<=18&& age>0}">
少年或兒童
</c:when>
<c:otherwise>
輸入錯誤
</c:otherwise>
</c:choose>
迭代標籤:
• <c:forEach>標籤
– <c:forEach>標籤用於對包含了多個對象的集合進行迭代,重複執行它的標籤體,或者重複迭代固定的次數。
注意:
Ø items屬性並不是一定要有的屬性,但是當沒有使用items屬性時,就一定要使用begin和end屬性。
Ø varStatus:用來儲存現有遍曆計數相關的資訊。例如,如果varStatus=“i”,那麼會將相應資訊放到名稱為i的變數中,i變數有四個屬性值,index、count、first和last。
Index是現在操作的成員的索引
Count是操作成員總數
First是所操作成員是否是第一個成員
Last是所操作成員是否是最後一個成員
Eg:
<c:forEach begin="1" end="10"step="1">
helloworld
</c:forEach><br/>
Eg2:按照表格類型顯示,奇數行和偶數行顏色不同,當游標放到欄位上時,整個欄位會變色
<head>
<style type="text/css">
.even{
background-color:#ffff99;
color:#ff0000;}
.odd{
background-color:#ffff00;
color:#ff0000;}
tr:hover{
background-color:#0000ff;}
</style>
</head>
<body>
<%
Listlist=new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
list.add("fff");
list.add("ggg");
list.add("hhh");
list.add("iii");
list.add("jjj");
request.setAttribute("list",list);
%>
<!--varStatus存的是狀態物件,在迭代過程中的狀態資訊,不支援EL運算式,狀態資訊有4個屬性:index,count,first和last -->
<table border="1"width="50%">
<c:forEach items="${list}"var="str" begin="1"end="9" step="1"varStatus="status">
<!--status.count%2!=0判斷是否是奇數行,奇數行——even,偶數行——odd -->
<tr class="${(status.count%2!=0)?'even':'odd'}">
<td>${str}</td>
<td>${status.index}</td>
<td>${status.first}</td>
<td>${status.last}</td>
<td>${status.count}</td>
</tr>
</c:forEach>
</table>
</body>
• <c:forTokens>標籤
– <c:forTokens>標籤用來瀏覽一字串中所有的成員,其成員是由定義符號(Delimiters)所分隔的。
Eg:
<c:forTokens items=“a:b:c:d” delims=“:”var=“token”>
<c:outvalue=“${token}” /> <br>
</c:forTokens>
注意:這個標記的使用效果相當於java.util.StringTokenizer類。將字串“a:b:c:d”以“:”分隔字元分開,token是迴圈到當前所分割得到的字串。
URL相關的標籤:
<c:import>標籤:可以把其他靜態或者動態檔案包含到本身的JSP頁面中。與JSP的動作<jsp:include>的區別在於:<jsp:include>只能包含和自己在同一個Web應用中的檔案,<c:import>不僅能包含和自己在同一個Web應用下的檔案,還可包含其他Web應用或其他網站的檔案。
Eg:
<!-- 如果寫var屬性的話,MyJsp.jsp中的內容會包含到secondPage中,必須用EL運算式在本頁顯示一下 -->
<c:import url="/MyJsp.jsp"var="secondPage"/>
${secondPage}
• <c:url>標籤
– <c:url>標籤在JSP頁面構造一個URL,它提供了3個功能元素,它們可以在URL前面附加當前Servlet內容相關的名稱;可以為會話管理重寫URL;可以對請求參數名稱和值進行URL編碼,這些功能在為J2EE Web應用程式構造URL時特別有用。
• <c:param>標籤
– <c:param>標籤的作用是為一個URL添加請求參數,在前面的<c:url>、<c:redirect>和<c:import>標籤中都已經見過<c:param>的用法。
<%session.setAttribute("xxxxx","xxxxx"); %>
<%
session.setAttribute("user","www");
%>
<!-- value構建地址,以var屬性名稱來儲存到範圍,scope儲存的範圍 -->
<!-- index.jsp加/,下面再顯示時,會顯示詳細的路徑 -->
<c:url value="/index.jsp"var="strUrl" scope="request">
<!-- c:param給url附加參數 -->
<c:param name="pageNo" value="2"></c:param>
</c:url>
${strUrl}
<a href="${strUrl}">首頁</a>
<a href="<c:url value='/index.jsp'/>">首頁</a>
• <c:redirect>標籤
– <c:redirect>標籤用於向使用者的瀏覽器發送HTTP重新導向響應,它是JSTL中與 javax.servlet.http.HttpServletResponse的sendRedirect()方法功能相當的標記。
Eg:
<!-- url重新導向的地址 -->
<c:redirect url="/MyJsp.jsp">
</c:redirect>