JSTL简介:
标准标签库JSTL的全名为:Java Server Pages Standard Tag Library.
JSTL主要提供了5大类标签库:
下面我们主要看一下核心标签库 c
引入:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
1.c:out标签
标签用于输出一段文本内容到pageContext对象当前保存的“out”对象中。
<body>
<br>
<% String name = "张无忌"; pageContext.setAttribute("name", name); %>
<c:out value="这个是常量"></c:out>
<br>
<c:out value="${name }"></c:out>
<br>
<c:out value="${name1111 }" default="默认值是张三丰"></c:out>
<br>
<a href="#">xxx</a>
<br>
<c:out value="<a href='#'>xxx</a>" escapeXml="true"></c:out>
<br>
${fn:escapeXml("<a href='#'>xxx</a>") }
</body>
2.c:set
< c:set>标签用于把某一个对象存在指定的域范围内,或者设置Web域中的java.util.Map类型的属性对象或JavaBean类型的属性对象的 属性。
<h2>设置或修改javaBean属性中的属性</h2>
<%Person p=new Person(); pageContext.setAttribute("p", p); %>
<c:set target="${p }" property="name" value="fc"></c:set>
${p.name }
//结果:设置或修改javaBean属性中的属性
fc
<h2>设置或修改Map中的属性</h2>
<br>
<%
Map<String, String> map = new HashMap();
pageContext.setAttribute("map", map);
%>
<c:set target="${map }" property="cellphone" value="110"></c:set>
${map.cellphone}
//结果:110
<h2>设置或修改域中的属性</h2>
<br>
<c:set var="name" value="林殊" scope="page"></c:set>
<br> ${name }
//结果:林殊
scope 可选 page|request|session|application
3.< c:remove>标签用于删除各种Web域中的属性
其语法格式如下:如果不写scope 全部删除
<c:remove var="varName"
[scope="{page|request|session|application}"] />
<% pageContext.setAttribute("name", "赫敏"); request.setAttribute("name", "哈利波特"); session.setAttribute("name", "金妮"); application.setAttribute("name", "罗恩"); %>
<c:remove var="name" scope="page" />
<c:remove var="name" scope="request" />
<c:remove var="name" scope="application" />
${name }
//结果:金妮
4.catch标签
catch标签的功能和java中的try{…}catch{…}语句的功能很相似,它用于捕获嵌入到其中间语句抛出的异常,这个标签的使用格式如下:
<c:catch var=”varName”>
相关操作语句
</c:catch> --如果操作语句中出现异常,则catch会将异常保存在 varName变量中.放在page域当中
<c:catch var="e">e 存到pagecontext中<br>
<%
int i = 1 / 0;
%>
</c:catch>
${e.message }
//结果:/ by zero
5.if标签
这个标签作用与java中的if语句作用相同,用于判断条件语句,主要的使用格式如下
1. 在< c:if> 体中不包括体的使用格式:
< c:if test=”checkCondition” var=”varName” scope=”page|request|session|application”/>
2. 当< c:if> 体中包括体时,使用格式如下:
< c:if test=”checkCondition” var=”varName” scope=”page|request|session|application”>
body content
< /c:if>
标签中使用的属性说明:
test : 判断条件的表达式,返回类型为true 或者 false;(也就是if的条件)
var : 这个变量用于保存test条件表达式判断所返回的true或者false值
(if条件执行后所得到的boolean值将要保存在var变量中).
scope : 指定var变量所在的有效范围.
6.choose , when , otherwise 标签
<body>
<%int day=113; pageContext.setAttribute("day", day); %>
<c:choose>
<c:when test="${day==1 }">
星期一
</c:when>
<c:when test="${day==2 }">
星期二
</c:when>
<c:when test="${day==3 }">
星期三
</c:when>
<c:otherwise>
休息
</c:otherwise>
</c:choose>
</body>
<c:set var=”num” scope=”page” value=”admin”/>
<c:choose>
<c:when test=”${num==’guest’}”>
<c:out value=”guest”/>
</c:when>
<c:when test=”${num==’admin’}”>
<c:out value=”admin”/>
</c:when>
<c:otherwise>
<c:out value=”other”/>
</c:otherwise>
</c:choose>
运行jsp页面后,输出 admin
7.forEach迭代标签
格式如下:
< c:forEach items=”collection” var=”varName” [varstatue=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>
Body content
< /c:forEach>
这个标签使用的属性描述如下:
1. var : 也就是保存在collection集合类中的对象名称.
2. items : 将要迭代的集合类名.
3. varStatus : 存储迭代的状态信息,可以访问到迭代自身的信息.
4. begin : 如果指定了begin值,就表示从items[begin]开始迭代;如果没有指定begin值,则从集合的第一个值开始迭代.
5. end : 表示迭代到集合的end位时结束,如果没有指定end值,则表示一直迭代到集合的最后一位.
6. step : 指定迭代的步长.
<h1>遍历数组中的数据</h1>
<% String[] city = { "北京", "上海", "青岛" }; pageContext.setAttribute("city", city); %>
<c:forEach items="${city }" var="c">
${c }
</c:forEach>
//结果:北京 上海 青岛
<h1>遍历集合中的数据</h1>
<%
List list = new ArrayList();
list.add("山东");
list.add("辽宁");
list.add("北京");
list.add("上海");
pageContext.setAttribute("list", list);
%>
<c:forEach items="${list }" var="p">
${p }
</c:forEach>
//结果:山东 辽宁 北京 上海
<h1>遍历Map中的数据</h1>
<%
Map map=new HashMap();
map.put("name", "fc");
map.put("gender", "男");
pageContext.setAttribute("map", map);
%>
<c:forEach items="${map }" var="entry">
${entry.key }:${entry.value }
</c:forEach>
//结果:age: 23 name: fc gender: 男
<h1>循环执行指定的内容若干次</h1>
<c:forEach begin="0" end="10" step="2" var="i">
${i }=>
</c:forEach>
//结果:0=> 2=> 4=> 6=> 8=> 10=>
<h1>遍历10到100的偶数 如果数字所在的位置是三的倍数 显示红色</h1>
<c:forEach begin="10" end="100" var="i" varStatus="status" >
<c:if test="${status.count %3==0 }">
<font color="red">${i }</font>
</c:if>
<c:if test="${status.count %3!=0 }">
<font color="blue">${i }</font>
</c:if>
</c:forEach>
<% String Items[] = new String[5]; Items[0] = "核心标签库"; Items[1] = "国际化标签库"; Items[2] = "SQL标签库"; Items[3] = "XML标签库"; Items[4] = "函数标签库"; request.setAttribute("ItemName", Items); %>
<br>
<B><c:out value="输出整个迭代的信息:" /><B><br>
<c:forEach var="Item" items="${ItemName}" begin="3" end="4" step="1" varStatus="s">
<c:out value="${Item }" />的四种属性:<br>
所在位置即索引: <c:out value="${s.index}" />
<br>
总共已迭代的次数: <c:out value="${s.count}" />
<br>
是否为第一个位置: <c:out value="${s.first}" />
<br>
是否为最后一个位置: <c:out value="${s.last}" />
<br>
<br>
</c:forEach>
结果:
输出整个迭代的信息:
XML标签库的四种属性:
所在位置即索引: 3
总共已迭代的次数: 1
是否为第一个位置: true
是否为最后一个位置: false
函数标签库的四种属性:
所在位置即索引: 4
总共已迭代的次数: 2
是否为第一个位置: false
是否为最后一个位置: true
8.forTokens 标签
这个标签的作用和Java中的StringTokenizer类的作用非常相似,通过items属性来指定一个特定的字符串,然后通过delims属性指定一种分隔符(可以同时指定多个),通过指定的分隔符把items属性指定的字符串进行分组,与forEach标签一样,forTokens标签也可以指定begin和end以及step属性值.
格式:
<c:forTokens items=”stringOfTokens” delims=”delimiters” var=”varName” [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>
Body content
</c:forTokens>
<c:forTokens items="www.itheima.com" delims="." var="s">
${s }
</c:forTokens>
结果:
www itheima com
9.< c:import>标签:
该标签用于把其他今天文件包含到该文件当中,它与传统的<jsp:include>相类似,不同的是<jsp:include>标签只能用来包括该应用中的其他文件,而<c:import>还可以包含外部站点中的静态文件,所以它的功能更加强大.
from xxxxx....
<c:import url="/index.jsp" var="p" scope="page"></c:import>
xxxx
yyyy
${p }
zzzz
//from xxxxx.... xxxx yyyy This is my JSP page.
//zzzz
10< c:redirect>和< c:param>标签:
Redirect标签用来进行页面之间的重定向,它与传统JSP程序重的< jsp:redirect>标签功能相类似,param标签是与redirect一起使用的,它用来进行参数值的传递,redirect标签的使用格式如下:
<c:redirect url="/index.jsp" context="${pageContext.request.contextPath}">
<c:param name="name" value="zhang"></c:param>
</c:redirect>
11.< c:url>标签:
这个标签主要用来重写url地址,使用格式如下:
< c:url value=”value” [context=”context”] [var=”varName”] [scope=”page|request|session|application”] />
//当进行参数传递时,使用格式如下:
<c:url value=”value” [context=”context”] [var=”varName”] [scope=”page|request|session|application”] >
< c: param name=”paramName” value=”value” />
</ c:url>
标签中使用的属性描述如下:
value: 将要处理的URL地址.
context: 当使用相对路径方法指定外部文件时,这个属性指定的是外在文件的名称.
var: 给这个URL地址起一个标识.
Scope: 规定这个var属性所指定变量的有效范围.
<% String url = response.encodeURL(request.getContextPath()+"/index.jsp"); %>
<a href="<%= url %>">hhhh</a>
<c:url value="/index.jsp" context="${pageContext.request.contextPath}" var="url" scope="page"></c:url>
<a href="${url }">xxx</a>
参考文章:
http://blog.csdn.net/imust_can/article/details/6965756