要使用jstl标签库必须使用standard-1.1.2.jar和jstl-1.2.jar包:
如果没有可以去下载:http://download.csdn.net/download/alan_tw/10111766
可以下载例题中的源码: http://download.csdn.net/download/alan_tw/10116791
一、表达式标签:
1. 输出标签<c:out>
语法:无标签体:<c:out value=”” escapeXml=”true|false”/>
有标签体:<c:out value=”” escapeXml=”true|false”>defalutValue</c:out>
value:要输出的变量或者是表达式
escapeXml:指定是否转换特殊字符
eg:
加载标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
在body中输入如下:
escapeXml属性为ture时:<c:out value="数字1<hr>" escapeXml="true"/><br>
escapeXml属性为false时:<c:out value="数字2<hr>" escapeXml="false"/><br>
实现效果:
2. 变量设置标签<c:set>
语法:分有无标签体(和<c:out>一样)
1. <c:set var=”” value=”” scope=”page|request|session|application”/>
2. <c:set var=”” scope=””>value值 </c:set> //(1,2)在指定的范围里将value赋值给var
3. <c:set value=”” target=”” property=””/>
4. <c:set target=”” property=””> value值</c:set> //(3,4)将value值赋值给target对象的property属性
var:变量名
value:变量值
scope:指定变量的作用域(默认为page)
target:储存变量值或者标签体的目标对象
eg:
先创建一个UserBean
package jstl;
public class UserInfo {
private Stringname;
public String getName() {
return name;
}
public void setName(Stringname) {
this.name =name;
}
}
在jsp中使用UserBean
<jsp:useBean id="userInfo" class="jstl.UserInfo"/>
在body中写入如下代码:
<c:set var="username" value="Alan"/>
<c:out value="username是:${username}"/><br>
<c:set value="UserBean_Name" property="name" target="${userInfo}"/>
<c:out value="这是userBean里的name:${userInfo.name}"></c:out>
实现结果:
3. 变量移除标签<c:remove>
语法:<c:remove var=”” scope=””/>
var:需要移除的变量
scope:用于指定变量的范围(page,request,session,application),如果不写,那么将分别在这四个中查找。
eg:
<ul>
<li>定义request范围内的变量username1</li>
<c:set var="username1" value="Alan" scope="request"/>
username1的值为:<c:out value="${username1}"></c:out><br>
<li>定义request范围内的变量username1</li>
<c:remove var="username1" scope="request"/>
username1的值为:<c:out value="${username1}" default="null"></c:out><br>
</ul>
实现效果:
4. 捕获异常标签<c:catch>
语法:<c:catch var=””> .... //可能有异常的代码 </c:catch>
var:可选,保存异常信息
eg:
<c:catch>
<c:out value="${0/0 }"/> </c:catch>
实现效果:
表示计算错误。
二、URL相关标签
1. 导入标签<c:import>
语法:<c:import url=”” [context=””] [scope=””] [var=””] [charEncoding=””]>
.... 标签体
</c:import>
url:被导入文件的url
context:上下文路径
var:指定变量名称
scope:变量的存在范围
charEncoding:导入文件的编码格式
eg:
<c:import url="count.jsp"charEncoding="utf-8"></c:import>
(我准备的是count.jsp,任何一个页面都可以)
count.jsp实现的结果:
实现结果:
2. 动态生成URL标签<c:url>
语法:<c:url value=”” [var=””] [scope=””] [context=””]/> 或者
<c:url value=”” [var=””] [scope=””] [context=””]/>
<c:param name="" value=""/>
<c:param name="" value=""/>
</c:url>
value:指定要处理的url
context:上下文路径
var:用于指定变量的名称
scope:变量的存在范围
eg:准备了一个count.jsp页面(任何一个页面都可以)
代码如下:
<c:url var="path" value="count.jsp" scope="page">
<c:param name="user" value="mr"></c:param>
<c:param name="password" value="123456"></c:param>
</c:url>
<a href="${pageScope.path }">提交</a>
第一个的实现效果:
3. 重定向标签<c:redirect>
语法:<c:redirect url=”” [context=””]/> 或者
<c:redirect url=”” [context=””]>
<c:param name="" value=""/>
....
</c:redirect>
url:指定url
context:用于使用相对路径访问外部context资源时,指定资源的名字。
eg:
<c:redirect url="count.jsp">
<c:param name="name" value="user"/>
</c:redirect>
实现效果:(直接跳转到count.jsp)
4. 传递参数标签<c:param>
语法:<c:param name="" value=""/>
name:指定参数名
value:指定参数值
eg:如上例题(传给index.jsp)
index.jsp通过如下代码获取传递的值:
${param.name }
实现效果:
三、流程控制标签
1. 条件判断标签<c:if>
语法:<c:if text=”” condition=”” scope=””/> 或者
<c:if text=”” condition=”” scope=””>
标签体
</c:if>
text:指定条件表达式
var:指定变量名
scope:变量范围(page默认,request,session,application)
eg:
jstl3.jsp代码:
<c:redirect url="index1.jsp">
<c:param name="name" value="user"/>
</c:redirect>
index1.jsp代码:
<c:if var="result" test="${emptyparam.name }">
请实现跳转页面...
</c:if>
<c:if test="${!result }">
${param.name },欢迎!
</c:if>
实现效果:
直接进入index.jsp的结果如下图:
从jstl3.jsp进入index1.jsp的结果如下图:
2. 条件测试标签<c:when>
语法: <c:when test=”condition”>
标签体
</c:when>
test:条件表达式
3. 其它条件标签<c:otherwise>
语法:<c:otherwise>
标签体
</c:otherwise>
4. 条件选择标签<c:choose>
<c:choose>
标签体 --由<c:when>,<c:otherwise>组成
</c:choose>
eg:
创建jstl4.jsp:
<c:redirect url="index2.jsp">
<c:param name="name" value="user"/>
</c:redirect>
创建index2.jsp:
<c:choose>
<c:when test="${emptyparam.name }">
请实现跳转页面...
</c:when>
<c:otherwise>
${param.name },欢迎!
</c:otherwise>
</c:choose>
实现效果:
四、循环标签
1. 循环标签<c:forEach>
(1) 集合成员迭代:
语法:<c:forEach items="" [var=""] [varStatus=""] [begin=””] [end=””] [step=””]>
标签体
</c:forEach>
items:用于指定被遍历的对象
var:用于指定被循环的变量名
begin:指定循环的起始位置
end:指定循环的终止位置
step:指定循环的步长
varStatus:指定循环的状态变量(index索引值(0开始),count索引值(1开始),first是否为第一次循环,last是否为最后一次循环)
eg:
编写jstl5.jsp:
<%
List<String> list=new ArrayList<String>();
list.add("第一");
list.add("第二");
list.add("第三");
request.setAttribute("list", list);
%>
<b>遍历List集合</b><br>
<c:forEach items="${requestScope.list }" var="keyword" varStatus="id">
${id.index } ${keyword }<br>
</c:forEach>
效果如下:
(2) 数字索引迭代:
语法:<c:forEach begin=”” end=”” [var=""] [varStatus=""] [step=””]>
标签体
</c:forEach>
eg:
<c:forEach var="i" begin=”1” end=”10” step=”2”>
${i }
</c:forEach>
实现效果:
2. 迭代标签<c:forTokens>
语法:<c:forTokens items=”” delims=”” [var=””] [begin=””] [end=””] [step=””] [varStatus=””]>
标签体
</c:forTokens>
items:要迭代的对象
delims:分隔字符串的分隔符
var:指定变量名
begin:迭代的开始位置
end:迭代的结束位置
step:迭代的步长
varStatus:用于指定循环的状态变量(和forChoose一样)
eg:
创建jstl6.jsp:
<c:set var="name" value="兴趣爱好:篮球;羽毛球;足球"></c:set>
<b>分割前的字符串:</b><c:out value="${name }"></c:out><br>
<b>分割后的字符串:</b><br>
<c:forTokens items="${name }" delims=": ;" var="item">
${item }<br>
</c:forTokens>
实现效果如下: