概念
Java Server Pages (JSP) 标准标记库 (JSTL)的版本的发布对于
JSP/servlet开发者来说是一个重大的进展。有了一个表达语言(EL)
和一组四种强大的、易于学习的标准标记库,JSTL极有可能不久后成为实
现动态的、基于Java的站点的主要方法。
1996年对JSP servlet的介绍使得Java成为动态网页开发的合理的选择。
随后出现的Java服务器页(JSP)是走向快速的、可维护的Java网页实现
过程的合理进化的一步,紧接着就出现了JSP标记的支持。但是2002中
期的JSTL(JSP标准标记库)的发布才是进一步加速和简化开发过程最大
的一步。
JSTL是Java中的一个定制标记库集。JSP标准标签库(JSTL)是一个JSP
标签集合,它封装了JSP应用的通用核心功能。JSTL支持通用的、结构化的任务,
比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它
还提供了一个框架来使用集成JSTL的自定义标签。
作用
1)实现了JSP页面的代码复用。基于标签库原理,重复率较高的代码块支持复用,
提高效率。
2)书写JSP页面时可读性更强。长得像XML,方便前端查看和参与开发。
3)在应用程序服务器之间提供了一致的接口,最大程度地提高了WEB应用在各应用
服务器之间的移植。
4)简化了JSP和WEB应用程序的开发。
标签使用
-
c:out
- 输出标签
//1.常量输出
<c:out value = "123"></c:out>
<c:out value = "abc"></c:out>
<c:out value = "true"></c:out>
//2.变量输出
//定义变量
//pageContext:是在整个Web应用上都是有效的,
//可以理解为所有的网页,因为这个对象是常常用来共享资源的,
//也就是用户1提交了一个资源,放到了pageContext作用域中,其它用户也可以看到这个资源。
//setAttribute:添加指定的属性,并为其赋指定的值。
<%
pageContext.setAttribute("j",2);
%>
//定义好变量后 开始输出
j=<c:out value="${j}"></c:out>
//3.转义输出
<c:out value = "<a href = '跳转目的地路径'>跳转</a>"></c:out>
//4.输出默认值
<%
pageContext.setAtribute("a",4);
%>
//如果"${a}"不存在 输出 default的值 也就是 a=3(正常的话 a=4)
a = <c:out value="${a}" default="3"></c:out>
-
c:set
- 赋值标签
//将 名字(var)为: JSTL标签之一 值为: c:set 的数据 存到 作用域page 中
<c:set var = "name" value = "c:set" scope = "page"></c:set>
//取值
//通过名字获取它的值
name=${pageScope.name}
//2.向map中添加,修改键值对
<%
Map<String,String> map = new HashMap<String,String>();
map.put("husband","丈夫");
map.put("wife","妻子");
//存到作用域中
pageContext.setattribute("map",map);
%>
//修改 map中的值
<c:set property = "brother" value = "哥哥" target = "${map}"></c:set>
brother=${map["brother"]}
<c:set property = "sister" value = "妹妹" target = "${map}"></c:set>
sister=${map["sister"]}
-
c:remove
- 删除标签
//先赋值在删除
//单个删
<c:set var = "name" value = "c:out" scope = "page"></c:set>
<c:set var = "name" value = "c:set" scope = "request"></c:set>
<c:remove var = "name" scope = "page"/>
name=${name}
//全删
<c:set var = "name" value = "c:out" scope = "page"></c:set>
<c:set var = "name" value = "c:set" scope = "request"></c:set>
<c:remove var = "name"></c:remove>
name = ${name}
-
c:forEach
- 两种for循环
//简介
< c:forEach
items="要被循环的信息"
begin="开始的元素"
end="最后一个元素"
step="每一次迭代的步长"
var="代表当前条目的变量名称"
varStatus="代表循环状态的变量名称"
>
//增强for循环
//先定义输出内容
<%
List<String> list = new ArrayList<String>();
//添加数据
list.add("J");
list.add("S");
list.add("T");
list.add("L");
%>
//接收要输出的数据对象
//var:当前输出内容所存在的地方
<c:forEach items="${list}" var="str">
//页面输出:接受页面输出内容
list=${str}<br>
</c:forEach>
//普通for循环
<c:forEach begin="0" end="4", step="1" varStatus="vs"> HELLO JSTL <br> index=${vs.index} count=${vs.count} first=$(vs.first)
</c:forEach>
//小程序测验
//打印10到100之间所有的偶数,把下坐标是3的倍数改成红色
//从 10 开始输出到 100,之间间隔为2(原本是11 12 13 ---》现在是10 12 14 )
//输出的数存到 var 定义的 num
//varStatus是循环中的数
<c:forEach begin="10" end="100" step="2" var="num" varStatus="vs2">
//将循环中的数进行判断(vs2.count 就是它的坐标(10 12 14) 其中14的坐标就是3,也就是3的1倍数)
//如果它是3的倍数就变红
<c:if test="${vs2.count%3==0}" var =
"flag">
//定义颜色
<font color = "red">${num}</font>
</c:if>
//上面判断的时候定义 flag 是符合要求的数
//所以这里直接 定义 !flag 就可以了
<c:if test="${! flag}">
//定义颜色
<font color="blue">${num}</font>
</c:if>
</c:forEach>
-
c:forTokens
- 标签切割
<c:forTokens
items="需要切割的数据"
delims="以什么切割"
var="输出内容"
>
页面显示
</c:forTokens>
//实例
<c:forTokens items = "1,2,3,4" delims="," var="sc">
sc=${sc}
</c:forTokens>
-
c:url
- 在需要的时候会自动重写URL
//实例
<a href="<c:url value="转页面的地址"/>">点击转页面</a>