jsp頁面是為了顯示數(shù)據(jù)屏镊,如果嵌入java代碼,就會使得可讀性差痰腮,java代碼也難以重用和維護而芥。為了不在jsp頁面里面寫java腳本,我們使用了jsp內(nèi)置的行為膀值、指令棍丐,也使用el表達式來獲取對象和值,但是這些并沒有提供循環(huán)遍歷的功能沧踏,所以我們就需要用到j(luò)stl標簽庫歌逢。
引入方式
要使用jstl標簽庫,我們需要用到tablib指令引入翘狱。
core標簽庫
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
引入這個標簽庫秘案,我們能使用:<c:out/>、<c:set/>、<c:remove/>阱高、<c:if test=""/>赚导、<c:choose />、<c:forTokens />赤惊、<c:catch /> 吼旧、<c:url />、 <c:redirect />荐捻、<c:forEach/>等標簽黍少。
- <c:out/>標簽
<c:out value="" default="" escapeXml />
作用:將指定內(nèi)容輸出到瀏覽器,默認支持el表達式,
value:輸出的值处面,可以為EL表達式
default:如果value屬性的值不存在厂置,會輸出default屬性值
excapeXml:如果為true,則會為value中的特殊字符進行轉(zhuǎn)義魂角,默認為true
<c:out value="${user.name}" default="不存在這個值" /> <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/>標簽
- <c:set var="" value="" [scope="{ page|request|session|application }"]></c:set>
這種var不能接受EL表達式箫爷,只能是字符 - <c:set target="" property="" value="" />
target:跟var類似痴荐,但是它只能夠接受EL表達式,可以是一個對象踪少,一個map等挣惰,和var進行互補
property:對象中的屬性名
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 />標簽
<c:remove var="" scope=""/>
移除page域中的hello卧斟,顯示時依次找page、request憎茂、session珍语、application中的hello,所以最后顯示的是request中的hello
<c:remove var="hello" scope="page"/>
<c:out value="${hello}"></c:out><br/>`
- <c:if test=""/>標簽
<c:if test="${not empty user.name }">
<c:out value="username: ${user.name}"></c:out><br/>
</c:if>
- <c:choose />標簽
<c:choose />相當于switch的作用
<c:when />相當于case的作用
<c:otherwise />相當于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 > 標簽
將自定義字符串竖幔,按照指定字符進行分割板乙,并遍歷輸出
items:自定義字符串
delims:指定字符
var:遍歷的變量名。
<c:forTokens items="lin-jia-qian" delims="-" var="s">
${s }<br/>
</c:forTokens>
- <c:catch > 標簽
相當于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/>標簽
<c:forEach items="" var="" />
items:需要遍歷的對象
var:用于存放遍歷的每一項內(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 />標簽
<c:url value="" var="" scope="" />
value:要進行重寫的url
var:如果寫了該變量,那么就會將其重寫后的url存入作用域中,默認是page馋评,以scope屬性值為準
scope:作用域范圍凡辱,默認是page
<c:url value="/index.jsp" var="beanNameUrl" scope="page">
<c:param name="userName" value="lin"></c:param>
</c:url>
<a href="${ beanNameUrl}">點擊跳轉(zhuǎn)</a>
這個可以用于瀏覽器把cookie功能關(guān)閉時傳遞sessionid。
- <c:redirect />標簽
<c:redirect url="/index.jsp">
</c:redirect>
- <c:import />標簽
類似于JSP的include行為和include指令栗恩,JSTL也提供了include功能的標簽<c:import/>,不過import標簽功能更強大,甚至可以把Internet上的網(wǎng)頁包含進來磕秤。
<c:import url="http://www.baidu.com" charEncoding="utf-8"/>
fmt標簽庫
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
是一些輔助性功能標簽乳乌,就講解一個把,用的不多
fn方法庫
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
提供一些方法市咆,函數(shù)汉操,例如字符串查找,截取之類蒙兰。
必須在el表達式中使用
格式: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)換為對應(yīng)的XML character entity code,并返回拢军。
5楞陷、fn:indexOf(string, substring)
返回參數(shù)substring在參數(shù)string中第一次出現(xiàn)的位置。
6茉唉、fn:join(array, separator)
將一個給定的數(shù)組array用給定的間隔符separator串在一起固蛾,組成一個新的字符串并返回。
7赌渣、fn:length(item)
返回參數(shù)item中包含元素的數(shù)量魏铅。參數(shù)Item類型是數(shù)組、collection或者String坚芜。如果是String類型,返回值是String中的字符數(shù)览芳。
8、fn:replace(string, before, after)
返回一個String對象鸿竖。用參數(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庫穗椅,不過一般不會在里面用