JSTL(JSP Standard Tag Library,jsp标准标签库)是Apache对EL表达式的扩展,也就是说JSTL依赖EL表达式。
但是它不是jsp内置的标签,所以用的时候需要我们自己导包,以及指定标签库。
Jstl标签库一共包含了四大标签库:
core:核心标签库,这是我们学习的重点;JSP规范为核心标签库建议的前缀名为c。
fmt:格式化标签库,在这个标签库中,我们只需要学习两个标签即可;
sql:数据库标签库,这个标签库已经过时;
xml:xml标签库,这个标签库已经过时。
jstl标签库的使用
导入jar包;
在使用标签的jsp页面中使用taglib指令导入标签库。在jsp页面导入jstl的核心标签库:<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core”%>
core标签库常用标签
<c:out/>
表示向浏览器端输出,可以是字符串常量,例如:<c:out value=”aaa”/>,也可以是EL表达式,例如:<c:out value=”${aaa}”/>
<c:set/>
set标签的作用就是设置域的属性,其用法格式如:<c:set var=”xxx” value=”xxx” scope=”xxx”/>
var:定义变量的名字;
value:表示变量的值,可以是EL表达式;
scope:表示将设置的变量存放在哪个域中,默认是page域,可选值为:page,request,session,application。
<c:remove/>
remove标签的作用是删除域中的数据,其在jsp页面中的用法:<c:remove var=”xxx” scope=”xxx”/>
var:指定删除变量的名字;
scope:指定从哪个域中删除指定的变量,可选值为:page,request,session,application;如果没有指定scope的值,则表示删除所有域中的名字为指定值的变量,如果指定了scope的值,那么将删除指定域中的指定变量。
<c:url/>
url标签的作用就是输出一个url路径,用法如:<c:url value=”xxx”/>。其中value属性的值是一个路径,url标签会在该路径前面添加上当前项目的名称。例如:<c:url value=”/index.jsp”/>,它会输出:/项目名/index.jsp。另外它还有另外两个属性:var。如果在url标签中添加了var这个属性,那么它不会再将路径输出,而是将路径保存在scope属性指定的域中,默认是保存在page域中,名字为var属性的值。
url标签中还包含了一个子标签:<c:param>,这个子标签的作用就是在url路径后面添加参数
<c:url value=”/index.jsp”>
<c:param name=”username” value=”张三”/>
</c:url>
以上例子输出来的url路径是:/项目名/index.jsp?username=%e5%bc%a0%e4%b8%89。其中username的值“张三”被url编码了,说明使用param标签会自动对中文进行url编码。
需要注意的是,url标签的value属性的值必须要以“/”开头,否则会出现问题,例如<c:url value=”index.jsp”/>,输出的结果是:index.jsp。
if标签
<c:if test=”表达式”>标签体</c:if>
if标签中没有else语句
choose标签
<c:choose>
<c:when test="xxx">xxx</c:when>
<c:when test="xxx">xxx</c:when>
<c:when test="xxx">xxx</c:when>
...
<c:otherwise>xxx</c:otherwise>
</c:choose>
forEach标签
forEach标签在我们以后的开发中用的很多,它的作用就是循环遍历数组或集合,也可以利用计数的方式来循环
<c:forEach var=”i” begin=”1” end=”10”>
${i}
</c:forEach>
以上就是定义一个变量i,i的值从1开始遍历到10结束。并且这个变量i被放在了page域中。
下面来分析以上三个属性的作用:
var:定义循环变量的名称;
begin:设置循环变量从几开始;
end:设置循环变量到几结束;
还有一个step属性,用来设置每次循环增长的大小,默认值为1。
forEach标签之循环数组
<%
String[] strs = {"one", "two"};
request.setAttribute("strs", strs);
%>
<c:forEach items="${strs }" var="str">
${str }<br/>
</c:forEach>
items:指定要循环的变量,可以是一个数组也可以是一个集合,默认是支持EL表达式;
var:把数组或集合中遍历的每一个元素赋值给var指定的变量。
forEach标签的循环状态
<%
ArrayList<String> list = new ArrayList<String>();
list.add("一");
list.add("二");
list.add("三");
pageContext.setAttribute("list", list);
%>
<c:forEach items="${list }" var="ele" varStatus="vs">
${vs.index} ${vs.count } ${vs.first } ${vs.last } ${vs.current }<br/>
</c:forEach>
varStatus属性就是用来记录循环状态的,它可以创建一个循环变量vs,该循环变量有如下属性:
count:用来记录循环元素的个数;
index:用来记录所循环元素的下标;
first:判断当前循环的元素是否是第一个元素;
last:判断当前循环的元素是否是最后一个元素;
current:代表当前循环的元素