前言
JSTL叫做标准标签库 但实际上它是由5个功能不同的标签库组成 这5个标签库分别是核心标签库 格式标签库 SQL标签库 XML标签库和函数标签库 在使用这些标签库之前,必须在JSP页面的顶部用<%@taglib%>指令定义引用的标签库和访问前缀
一、表达式标签
1:<c:out>
标签用于将表达式的值输出到JSP页面中 该标签类似于JSP的表达式<%=表达式%>
或者EL表达式${expression} 它由两种语法格式 一种没有标签体 另一种有标签体 这两种语言的输出结果完全相同
1:没有标签体
<c:out value="expression" [escapeXml="true[false"][default="defaultValue"]/>
2:有标签体
<c:out value="expression"[escapeXml="true[false"]> defaultValue </c:out>
2:<c:set>
标签用于在指定范围中定义保存某个值的变量 或为指定的对象设置属性值 使用该标签可以在页面中定义变量 而不用在JSP页面中嵌入打乱HTML排版的JAVA代码 有四种语法格式
1:在scope指定的范围内将变量值存储的变量中
<c:set var="name" value="value" [scope="范围"]/>
2:在scope指定范围内将标签体存储到变量中
<c:set var="name" [scope="page|request|session|application"]> 标签体 </c:set>
3:将变量值存储在target属性指定的目标对象的propName属性中
<c:set value="value" target="object" property="propName"/>
4:将标签体存储到target属性指定的目标对象的propName属性中
<c:set target="object" property="propName"/> 标签体 </c:set>
3:<c:remove>
标签用于移除指定的JSP范围内的变量 语法如下
<c:remove var="name" [scope="范围"]/>
4:<c:catch>
标签用于捕获程序中出现的异常 如果需要它还可以将异常信息保存在指定的变量中 该标签与java中的 try...catch语句类似 语法如下
<c:catch [var="exception"]> //可能存在异常的代码 </catch>
二、URL相关标签
1:<c:import>
标签可以导入站内或者其他网页的静态和动态文件到Web页面中 与JSP中<jsp:include>
类似 不同的是JSP只能导入站内资源 而import还可以导入站外资源
有如下两种语法
1:
<c:import url="url" [context="context"] [var="name"] [scope="范围"] [charEncoding="encoding"]> 标签体 </c:import>
2:
<c:import url="url" varReader="name" [context="context"] [charEncoding="encoding"]> [标签体] </c:import>
2:<c:url>
标签用于生成一个URL路径的字符串 这个生成的字符串可以赋予HTML的<a>标记实现URL的连接 或者用这个生成的URL字符串实现网页转发与重定向等 两种语法如下
<c:url value="url" var="name"][scope="范围"] [context="context"]/> <c:url value="url" var="name"][scope="范围"][context="context]> <c:param/> 可以有多个<c:param>标签 </c:url>
3:<c:direct>
重定向标签可以将客户端发出的request请求重定向到其他URL服务端 由其他程序处理客户端的请求 这期间可以对request请求中的属性进行修改或添加 然后把所有属性传递到目标路径 语法有如下两种
<c:redirect url="url" [context="/context"]/> <c:redirect url="url" [context="/context"]> <c:param/> 可以有多个<c:param>标签 </c:redirect>
4:<c:param>
标签用于为其他标签提供参数信息 可以实现动态指定参数 从而使标签可以完成更复杂的程序应用 语法如下
<c:param name="paramName" value="paramValue"/>
三:流程控制标签
流程控制标签在程序中会根据不同的条件去执行不同的代码来产生不同的运行结果 使用流程控制可以处理程序中任何可能发生的事情
1:<c:if>
条件判断标签可以根据不同的条件处理不同的业务 它与Java语言中的if语句类似 只不过该标签没有else标签
判断条件表达式 并将表达结果保存在var属性指定的变量中
<c:if test="condition" var="name" [scope=page|request|session|application]/>
语法二还可以根据条件判断结果去执行标签体
<c:if test="conditon" var="name" [scope="范围"]> 标签体 </c:if>
2:<c:choose>
标签可以根据不同的条件完成指定的业务逻辑 如果没有符合条件就执行默认条件的业务逻辑<c:choose>
标签只能作为<c:when>
和<c:otherwise>
标签的父标签 而要实现条件选择逻辑可以在<c:choose>
中嵌套<c:when>
和<c:otherwise>
标签来完成
即判断when的条件是否正确 正确则显示 否则判断下一个 直到判断到otherwise
<c:choose> 标签体 </c:choose>
3:<c:when>
条件测试标签是<c:choose>
的子标签 它根据不同的条件执行相应的业务逻辑
<c:when test="conditon"> 标签体 </c:when>
4:<c:otherwise>
同上 语法如下
</c:otherwise> 标签体 </:otherwise>
四:循环标签
1:<c:forEach>
循环标签可以根据循环条件 遍历数组和集合类中的所有或部分数据 语法有两种
<c:forEach items="data" [var="name"] [begin="start"][end="finish"][step="step] [varStatus="statusName"]> 标签体 </c:forEach> <c:forEach begin="start" end="finish" [var="name"] [varStatus="statusName"][step="step"]> 标签体 </c:forEach>
2:<c:forTokens>
迭代标签可以用指定的分隔符将一个字符串分隔开 根据分割的数量确定循环的次数 语法如下
<c:forTokens items="String" delims="char" [var="name"] [begin="start"] [end="end"][step="len"][varStatus="statusName"]> 标签体 </c:forTokens>
总结
首先对JSTL标签库进行了简要介绍 最后重点对表达式标签 URL相关标签 流程控制标签和循环标签进行了详细介绍