jsp頁面是為了顯示數(shù)據(jù),如果嵌入java代碼,就會(huì)使得可讀性差,java代碼也難以重用和維護(hù)。為了不在jsp頁面里面寫java腳本,我們使用了jsp內(nèi)置的行為、指令,也使用el表達(dá)式來獲取對(duì)象和值,但是這些并沒有提供循環(huán)遍歷的功能,所以我們就需要用到j(luò)stl標(biāo)簽庫。
引入方式
要使用jstl標(biāo)簽庫,我們需要用到tablib指令引入。
core標(biāo)簽庫
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
引入這個(gè)標(biāo)簽庫,我們能使用:<c:out/>、<c:set/>、<c:remove/>、<c:if test=""/>、<c:choose />、<c:forTokens />、<c:catch /> 、<c:url />、 <c:redirect />、<c:forEach/>等標(biāo)簽。
- <c:out/>標(biāo)簽
<c:out value="" default="" escapeXml />
作用:將指定內(nèi)容輸出到瀏覽器,默認(rèn)支持el表達(dá)式,
value:輸出的值,可以為EL表達(dá)式
default:如果value屬性的值不存在,會(huì)輸出default屬性值
excapeXml:如果為true,則會(huì)為value中的特殊字符進(jìn)行轉(zhuǎn)義,默認(rèn)為true
<c:out value="${user.name}" default="不存在這個(gè)值" /> <br/>
<c:out value="${empty user}" /> <br/>
<c:out value="字符串" /> <br/>
<c:out value="<b>不轉(zhuǎn)義</b>" escapeXml="false"/> <br/>

第一行不存在user.name , 所以顯示的是default里面的內(nèi)容;
第四行選擇不轉(zhuǎn)義,所以<b></b>這些字符沒有顯示,并且內(nèi)容加粗了
- <c:set/>標(biāo)簽
- <c:set var="" value="" [scope="{ page|request|session|application }"]></c:set>
這種var不能接受EL表達(dá)式,只能是字符 - <c:set target="" property="" value="" />
target:跟var類似,但是它只能夠接受EL表達(dá)式,可以是一個(gè)對(duì)象,一個(gè)map等,和var進(jìn)行互補(bǔ)
property:對(duì)象中的屬性名
value:屬性賦值
<c:set var="hello" value="hello page" scope="page"></c:set>
<c:set var="hello" value="hello request" scope="request"></c:set>
<c:out value="${hello}"></c:out><br/>
<c:out value="${requestScope.hello}"></c:out><br/>
<jsp:useBean id="user" class="bean.user" scope="page"/>
<c:set target="${user}" property="name" value="hello world"></c:set>
<c:out value="${user.name}"></c:out><br/>

- <c:remove />標(biāo)簽
<c:remove var="" scope=""/>
移除page域中的hello,顯示時(shí)依次找page、request、session、application中的hello,所以最后顯示的是request中的hello
<c:remove var="hello" scope="page"/>
<c:out value="${hello}"></c:out><br/>`

- <c:if test=""/>標(biāo)簽
<c:if test="${not empty user.name }">
<c:out value="username: ${user.name}"></c:out><br/>
</c:if>

- <c:choose />標(biāo)簽
<c:choose />相當(dāng)于switch的作用
<c:when />相當(dāng)于case的作用
<c:otherwise />相當(dāng)于default的作用
<c:set target="${user }" property="age" value="15"/>
<c:choose>
<c:when test="${user.age<10 }">小于10歲</c:when>
<c:when test="${user.age<20 }">大于等于10歲小于20歲</c:when>
<c:otherwise>大于等于20歲</c:otherwise>
</c:choose>

- <c:forTokens > 標(biāo)簽
將自定義字符串,按照指定字符進(jìn)行分割,并遍歷輸出
items:自定義字符串
delims:指定字符
var:遍歷的變量名。
<c:forTokens items="lin-jia-qian" delims="-" var="s">
${s }<br/>
</c:forTokens>

- <c:catch > 標(biāo)簽
相當(dāng)于try catch
<c:catch var="e">
<c:set target="cuowudefuzhi" property="hi" value="dfdvc"/>
</c:catch>
<c:if test="${not empty e }">
${e }<br/>
</c:if>

- <c:forEach/>標(biāo)簽
<c:forEach items="" var="" />
items:需要遍歷的對(duì)象
var:用于存放遍歷的每一項(xiàng)內(nèi)容,存放在page作用域,只能在循環(huán)體中使用
普通for循環(huán):
<c:forEach var="num" begin="0" end="10" step="2">
${num }
</c:forEach>

forEach list集合:
<%
List<String> list=new ArrayList<String>();
list.add("item1");
list.add("item2");
list.add("item3");
pageContext.setAttribute("list", list);
%>
<c:forEach items="${list }" var="str" >
${str}<br/>
</c:forEach>

forEach map映射:
<%
Map<String,String> map=new HashMap<String,String>();
map.put("1","hello");
map.put("2","world");
pageContext.setAttribute("map", map);
%>
<c:forEach items="${map }" var="item">
${item.key }=${item.value }<br/>
</c:forEach>

- <c:url />標(biāo)簽
<c:url value="" var="" scope="" />
value:要進(jìn)行重寫的url
var:如果寫了該變量,那么就會(huì)將其重寫后的url存入作用域中,默認(rèn)是page,以scope屬性值為準(zhǔn)
scope:作用域范圍,默認(rèn)是page
<c:url value="/index.jsp" var="beanNameUrl" scope="page">
<c:param name="userName" value="lin"></c:param>
</c:url>
<a href="${ beanNameUrl}">點(diǎn)擊跳轉(zhuǎn)</a>

這個(gè)可以用于瀏覽器把cookie功能關(guān)閉時(shí)傳遞sessionid。
- <c:redirect />標(biāo)簽
<c:redirect url="/index.jsp">
</c:redirect>
- <c:import />標(biāo)簽
類似于JSP的include行為和include指令,JSTL也提供了include功能的標(biāo)簽<c:import/>,不過import標(biāo)簽功能更強(qiáng)大,甚至可以把Internet上的網(wǎng)頁包含進(jìn)來。
<c:import url="http://www.baidu.com" charEncoding="utf-8"/>

fmt標(biāo)簽庫
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
是一些輔助性功能標(biāo)簽,就講解一個(gè)把,用的不多
fn方法庫
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
提供一些方法,函數(shù),例如字符串查找,截取之類。
必須在el表達(dá)式中使用
格式:fn:methodName()的格式,比如:fn:contains()
1、fn:contains(string, substring)
如果參數(shù)string中包含參數(shù)substring,返回true。
2、fn:containsIgnoreCase(string, substring)
如果參數(shù)string中包含參數(shù)substring(忽略大小寫),返回true
3、fn:endsWith(string, suffix)
如果參數(shù) string 以參數(shù)suffix結(jié)尾,返回true。
4、fn:escapeXml(string)
將有特殊意義的XML (和HTML)轉(zhuǎn)換為對(duì)應(yīng)的XML character entity code,并返回。
5、fn:indexOf(string, substring)
返回參數(shù)substring在參數(shù)string中第一次出現(xiàn)的位置。
6、fn:join(array, separator)
將一個(gè)給定的數(shù)組array用給定的間隔符separator串在一起,組成一個(gè)新的字符串并返回。
7、fn:length(item)
返回參數(shù)item中包含元素的數(shù)量。參數(shù)Item類型是數(shù)組、collection或者String。如果是String類型,返回值是String中的字符數(shù)。
8、fn:replace(string, before, after)
返回一個(gè)String對(duì)象。用參數(shù)after字符串替換參數(shù)string中所有出現(xiàn)參數(shù)before字符串的地方,并返回替換后的結(jié)果。
9、fn:startsWith(string, prefix)
如果參數(shù)string以參數(shù)prefix開頭,返回true。
10、fn:substring(string, begin, end)
返回參數(shù)string部分字符串, 從參數(shù)begin開始到參數(shù)end位置。
11、fn:substringAfter(string, substring)
返回參數(shù)substring在參數(shù)string中后面的那一部分字符串。
12、fn:substringBefore(string, substring)
返回參數(shù)substring在參數(shù)string中前面的那一部分字符串。
13、fn:toLowerCase(string)
將參數(shù)string所有的字符變?yōu)樾?,并將其返回?/p>
14、fn:toUpperCase(string)
將參數(shù)string所有的字符變?yōu)榇髮?,并將其返回?/p>
15、fn:trim(string)
去除參數(shù)string 首尾的空格,并將其返回。
其他庫
除此之外,還有sql庫和xml庫,不過一般不會(huì)在里面用