1、JSP标准标签库(JSP Standard Tag Library,JSTL)是实现Web应用程序中常见的通用功能的定制标签库集,使用JSTL标签来避免在JSP页面中使用脚本。
2、JSTL概述:
JSTL英文全称是“JSP Standard Tag Library”,即JSP标准标签库之意。
JSTL是由JCP(Java Commnunity Process)指定的标准规范是一组形如html的标签。
3、Core标签库
核心标签库主要包括通用标签、条件标签、迭代标签和与URL相关的标签。
使用Core标签库的JSP文件开始部分,要添加指令<%@taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”>
4、通用标签:
(1)<c:out>标签:将表达式的结果输出到当前的JspWriter对象中。其功能类似与JSP的表达式<%=...%>,或者EL表达式${}。
语法:<c:out value=”value”[default=”default value”] [escapeXml=”true|false”]/>
<c:out value=”value”[escapeXml=”true|faluse”]>
default value
</c:out>
注:value值为空时,输出默认值;escapeXml为true时,对输出内容中的<、>、”、’和&字符进行转义,分别转成<、>、'、"和&。
eg.<jsp:useBean id="userbean" class="com.csdn.hbsi.bean.UserBean"/>
<c:set value="lgj" target="${userbean}" property="username"/>
<c:out value="${userbean.username}"/>
(2)<c:set>标签:用于设置JSP页面的各种域范围中的变量,或者设置java.util.Map对象或JavaBean对象的属性。
语法:<c:set value=”value” var=”name” [scope=”范围”]/>
将value的值保存到名为name的变量中,同时name保存到指定的作用范围中。
<c:set var=”name” [scope=”范围”]>
value
</c:set>
将标签体中的内容保存到名为name的变量中,同时name变量保存到指定的作用范围中。
<c:set value=”value” target=”target” property=”propertyName”/>
将value的值保存到target对象的porpertyName属性中。
<c:set target=”target” property=”porpertyName”>
Value
</c:set>
eg.<jsp:useBean id="userbean" class="com.csdn.hbsi.bean.UserBean"/>
<c:set value="cccccc" target="${userbean}" property="username"/> 无标签体设置对象中的属性<br/>
<c:out value="${userbean.username}"></c:out>
注:范围是:page|request|session|application
(3)<c:remove>标签:用于移除JSP页面中指定域范围中的变量。
语法:<c:remove var=”name” [scope=”范围”]/>
eg.<c:set var="username">aaaa</c:set>
输出标签体内容:<c:out value="${username}"/><br>
<c:remove var="username"/>
输出执行remove标签后的内容:<c:out value="${username}">当username为空时输出这里的内容</c:out><br>
(4)<c:catch>标签:用于捕获嵌套在标签体内的内容抛出的异常对象,并将异常对象信息保存到变量中。
语法:<c:catch [var=”name”]>
bodycontent
</c:catch>
将可能反生异常的代码放在该标签中,如果发生异常,异常信息保存到name变量中。
eg.<c:catch var="exception">
<%
int[] nums = new int[5];
System.out.println(nums[5]);
%>
</c:catch>
异常输出:
<c:out value="${exception}"/>
(5)<c:if>标签:用于来做条件判断,功能类似于JSP中<%if(boolean){}%>
语法:<c:if test=”condition” var=”varName” [scope=”范围”]>
<c:if test=”condition” var=”name” scope=”范围”>
</c:if>
注:对于判断标签的test属性,可以使用一些关系操作符,如:==、!=、<、>、>=、<=等,也可以将这些关系操作符用eq、ne、lt、le、gt、ge取代。
e.g.<c:set var="username" value="1"/>
<c:if test="${username==1}" var="isok">
条件成立,输出内容。
</c:if>
<c:out value="${isok}" />
(6)<c:choose><c:when/>|<c:otherwise/></c:choose>标签:<c:choose>标签用于提供条件选择的上下文,他必须与<c:when>和<c:otherwise>
<c:when>作为<c:choose>的子标签,<c:when>有一个test属性,该属性的值为boolean类型,如果test的值为true,则执行<c:when>标签体的内容。
<c:otherwise>标签没有属性,它必须作为<c:choose>标签的最后分支出现。
语法:<c:choose>
<c:when test=”condition”>条件为true的时候执行</c:when>(一个或多个)
<c:otherwise></c:otherwise>(零个或者一个)
</c:choose>
e.g<c:set var="score" value="80" />
<c:choose>
<c:when test="${score>=90}">成绩优秀!</c:when>
<c:when test="${score>=80&&score<90}">成绩优良!</c:when>
<c:when test="${score>=70&&score<80}">成绩一般!</c:when>
<c:otherwise>成绩较差!</c:otherwise>
</c:choose>
(7)<c:forEach>标签:用于包含了多个对象的集合进行迭代,重复执行它的标签体,或者重复迭代固定的次数。
语法:对多个对象集合进行迭代:
<c:forEach var=”varName” items=”collection” varStatus=”StringName” begin=”beginindex” end=”endindex” step=”step”>
bodycontent
</c:forEach>
注:items属性并不是一定要有的属性,但是当没有使用items属性时,就一定要使用begin和end属性。
varStatus:用来保存现在遍历计数相关的信息。例如:如果varStatus=”i”,那么会将相应信息放在名称为i的变量中,i变量有四个属性值,index(现在所操作的成员的索引)、count(所操作的成员总数)、first(现在所操作成员是否是第一个成员)和last。
e.g
输出1-8之间的数字,步长为2:
<c:forEach var="items" begin="1" end="8" step="2">
<c:out value="${items}" />
</c:forEach>
<br />
forEach遍历字符串:
<c:forEach items="abc,def,nnn,kkk" var="items" begin="1" end="2">
<c:out value="${items}" />
</c:forEach>
小九九
<table border="1">
<c:forEach var="i" begin="1" end="9" varStatus="status">
<tr>
<c:forEach var="j" begin="1" end="${i}">
<td>
<c:out value="${j}*${i}=${j*i }"></c:out>
</td>
</c:forEach>
</tr>
</c:forEach>
</table>
(8)<c:forTokens>标签:用来浏览一字符串中所有的成员
,其成员是由定义符号(Delimiters)所分隔的。
<c:forTokens items=”aa:bb:nn:dd” delims=”:”var=”token”>
<c:out value=”${token}”/><br>
</c:forTokens>
注:这个标记使用效果相当于java.util.StringTokenizer类。将字符串“aa:bb:nn:dd”以“:”分隔符分开,token是循环到当前所分割得到的字符串。
E.g、<c:forTokens items="aaa|nnn|ccc|vvv" delims="|" var="items">
<c:out value="${items}" />
</c:forTokens>
(9)URL相关的标签
<c:import>、<c:url>、<c:redirect>和<c:param>标签:用于超链接、页面的包含和重定向等操作。
<c:import>标签:可以把其他静态或者动态文件包含到本身的JSP页面中。与JSP的动作<jsp:include>
的区别在于:<jsp:include>只能包含和自己在同一个Web应用中的文件,<c:import>不仅包含和自己在同一个Web应用下的文件,还包含其他Web应用或者其他网站的文件。
e.g. <c:import url="http://www.baidu.com" ></c:import>
(10)<c:url>标签:在Jsp页面构造一个URL,它提供了3个功能元素,它们可以在URL前面附加当前Servlet上下文的名称;可以为会话管理重写URL;可以对请求参数名称和值进行URL编码,这些功能在为J2EE Web应用程序构造URL时特别有用。
语法:<c:url value=”value指定url” context=”context指定上下文名称” var=”varName” scope=””/>
<c:url value=”value指定url” context=”context指定上下文名称” var=”varName” scope=””>
<c:param name=”paramname” value=”paramvalue”>
</c:url>
e.g. <c:url value="Cif.jsp">
<c:param name="a" value="aaaa"></c:param>
<c:param name="b" value="bbbb"></c:param>
</c:url>
<hr>
<a href="<c:url value='Cif.jsp'/>">单击此处</a>
属性:
url属性是必要有的,它是用来设定被包含页面的地址,可以是绝对地址也可以是相对地址。
Url使用相对地址:<c:import url=”MyHtml.html”/>.
使用绝对路径:将其他网站的文件包含进来。<c:import url=”http://www.baidu.com” charEncoding=”gb2312”/>
当var属性存在时,把文件内容包含进来,但是它不输出到页面上,而是保存到var设定的变量中,而属性scope设定变量的作用范围。
(11)<c:redirect>标签:用于向用户的浏览器发送HTTP重定向响应,它是JSTL中与javax.servlet.http.HttpServletResponse的sendRedirect()方法功能相当的标记。
语法:<c:redirecturl=”url”context= ”contextName”/>
<c:redirect url=”url”context=”contextName”>
<c:param name=”paramname” alue=”paramvalue”/>
</c:redirect>
e.g.<c:redirect url="CforEach.jsp">
<c:param name="a" value="aaa"></c:param>
</c:redirect>
(12)<c:param>标签:作用是为一个URL添加请求参数。