JSTL标签库简介
虽然JSTL叫做标准标签库,实际上它是由5个功能不同的标签库组成。这5个标签库分别是核心标签库、格式标签库、SQL标签库、XML标签库和函数标签库等。在使用这些标签之前必须在JSP页面的顶部使用<%@ taglib%>指令定义引用的标签库和访问前缀。
使用核心标签库的taglib指令格式如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用格式标签库的taglib指令格式如下:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
使用SQL标签库的taglib指令格式如下:
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
使用XML标签库的taglib指令格式如下:
<%@ taglib prefix="xml" uri="http://java.sun.com/jsp/jstl/xml"%>
使用函数标签库的taglib指令格式如下:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
JSTL的配置
由于JSTL还不是JSP 2.0规范中的一部分,所以在使用JSTL之前,需要安装并配置JSTL。下面将介绍如何配置JSTL。
JSTL标签库可以到Oracle公司的官方网站上下载,在浏览器地址栏中输入“http://java.sun.com/products/jsp/jstl”,将会自动转发至Oracle公司官方下载网址。JSTL的标签库下载完毕后,就可以在Web应用中配置JSTL标签库。配置JSTL标签库有两种方法,一种是直接将jstl-api-1.2.jar和jstl-impl-1.2.jar复制到Web应用的WEB-INF\lib目录中即可;另一种是在Eclipse中通过配置构建路径的方法进行添加。
表达式标签
<c:out>标签用于将表达式的值输出到JSP页面中,该标签类似于JSP的表达式<%=表达式%>,或者EL表达式${expression}。<c:out>标签有两种语法格式,一种没有标签体,另一种有标签体,这两种语言的输出结果完全相同。<c:out>标签的具体语法格式如下:
语法1——没有标签体:
<c:out value="expression" [escapeXml="true|false"] [default="defaultValue"]/>
语法2——有标签体:
<c:out value="expression" [escapeXml="true|false"]>
defalultValue
</c:out>
<c:set>标签用于在指定范围(page、request、session或application)中定义保存某个值的变量,或为指定的对象设置属性值。使用该标签可以在页面中定义变量,而不用在JSP页面中嵌入打乱HTML排版的Java代码。<:set>标签有4种语法格式。
语法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>
<c:remove>标签用于移除指定的JSP范围内的变量,其语法格式如下:
<c:remove var="name" [scope="范围"]/>
参数说明:
þ var属性:用于指定要移除的变量名。
þ scope属性:用于指定变量的有效范围,可选值有page、request、session、application。默认值是page。如果在该标签中没有指定变量的有效范围,那么将分别在page、request、session和application的范围内查找要移除的变量并移除。例如,在一个页面中,存在不同范围的两个同名变量,当不指定范围时移除该变量,这两个范围内的变量都将被移除。为此,在以移除变量时,最好指定变量的有效范围。
<c:catch>标签用于捕获程序中出现的异常,如果需要它还可以将异常信息保存在指定的变量中。该标签与Java语言中的try...catch语句类似。<c:catch>标签的语法格式如下:
<c:catch [var="exception"]>
…//可能存在异常的代码
</c:catch>
参数说明:
var属性:可选属性,用于指定存储异常信息的变量。如果不需要保存异常信息,可以省略该属性。
URL相关标签
<c:import>标签可以导入站内或其他网站的静态和动态文件到Web页面中,例如,使用<c:import>标签导入其他网站的天气信息到自己的网页中。<c:import>标签与<jsp:include>动作指令类似,所不同的是<jsp:include>只能导入站内资源,而<c:import>标签不仅可以导入站内资源,也可以导入其他网站的资源<c: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>
<c:url>标签用于生成一个URL路径的字符串,这个生成的字符串可以赋予HTML的<a>标记实现URL的连接,或者用这个生成的URL字符串实现网页转发与重定向等。在使用该标签生成URL时,还可以与<c:param>标签相结合动态添加URL的参数信息。<c:url>标签的语法格式如下。
语法1:
<c:url value="url" [var="name"] [scope="范围"] [context="context"]/>
该语法将输出产生的URL字符串信息,如果指定了var和scope属性,相应的URL信息就不在输出,而是存储在变量中以备后用。
语法2:
<c:url value="url" var="name"] [scope="范围"] [context="context"]>
<c:param/>
… <!--可以有多个<c:param>标签-->
</c:url>
<c:redirect>标签可以将客户端发出的request请求重定向到其他URL服务端,由其他程序处理客户的请求。而在这期间可以对request请求中的属性进行修改或添加,然后把所有属性传递到目标路径。该标签的语法格式如下。
语法1:该语法格式没有标签体,并且不添加传递到目标路径的参数信息。
<c:redirect url="url" [context="/context"]/>
语法2:该语法格式将客户请求重定向到目标路径,并且在标签体中使用<c:param>标签传递其他参数信息。
<c:redirect url="url" [context="/context"]>
<c:param/>
…<!--可以有多个<c:param>标签-->
</c:redirect>
<c:param>标签只用于为其他标签提供参数信息,它与<c:import>、<c:redirect>和<c:url>标签组合可以实现动态定制参数,从而使标签可以完成更复杂的程序应用。<c:param>标签的语法格式如下:
<c:param name="paramName" value="paramValue"/>
参数说明如下:
þ name属性:用于指定参数名,可以引用EL。如果参数名为null或是空,该标签将不起任何作用。
þ value属性:用于指定参数值,可以引用EL。如果参数值为null,该作为空值处理。
流程控制标签
<cif>条件判断标签可以根据不同的条件去处理不同的业务。它与Java语言中的if语句类似,只不过该语句没有else标签。<c:if>标签有两种语法格式。
语法1:该语法格式会判断条件表达式,并将条件的判断结果保存在var属性指定的变量中,而这个变量存在于scope属性所指定的范围中。
<c:if test="condition" var="name" [scope=page|request|session|application]/>
语法2:该语法格式不但可以将test属性的判断结果保存在指定范围的变量中,还可以根据条件的判断结果去执行标签体。标签体可以是JSP页面能够使用的任何元素,例如,HTML标记、Java代码或者嵌入其他JSP标签。
<c:if test="condition" var="name" [scope="范围"]>
标签体
</c:if>
<c:choose>标签可以根据不同的条件去完成指定的业务逻辑,如果没有符合的条件会执行默认条件的业务逻辑。<c:choose>标签只能作为<c:when>和<c:otherwise>标签的父标签,而要实现条件选择逻辑可以在<c:choose>标签中嵌套<c:when>和<c:otherwise>标签来完成。<c:choose>标签的语法格式如下:
<c:choose>
标签体<!--由<c:when>标签和<c:otherwise>标签组成-->
</c:choose>
<c:when>条件测试标签是<c:choose>标签的子标签,它根据不同的条件去执行相应的业务逻辑,可以存在多个<c:when>标签来处理不同条件的业务逻辑。<c:when>标签的语法格式如下:
<c:when test="condition">
标签体
</c:when>
<c:otherwise>标签也是<c:choose>标签的子标签,用于定义<c:choose>标签中的默认条件处理逻辑,如果没有任何一个结果满足<c:when>标签指定的条件,将会执行这个标签体中定义的逻辑代码。在<c:choose>标签范围内只能存在一个该标签的定义。 <c:otherwise>标签的语法格式如下:
<c:otherwise>
标签体
</c:otherwise>
循环标签
<c:forEach>标签的语法格式如下。
语法1:集合成员迭代
<c:forEach items="data" [var="name"] [begin="start"] [end="finish"] [step="step"] [varStatus="statusName"]>
标签体
</c:forEach>
在该语法中,items属性是必选属性,通常使用EL指定,其他属性均为可选属性。
语法2:数字索引迭代(不一定是数组,可能是某一范围内的变量)
<c:forEach begin="start" end="finish" [var="name"] [varStatus="statusName"] [step="step"]>
标签体
</c:forEach>
<c:forTokens>迭代标签可以用指定的分隔符将一个字符串分割开,根据分割的数量确定循环的次数。<c:forTokens>标签的语法格式如下:
<c:forTokens items="String" delims="char" [var="name"] [begin="start"] [end="end"] [step="len"] [varStatus="statusName"]>
标签体
</c:forTokens>