JSTL提供了核心标签库、格式标签库、SQL标签库、XML标签库和函数标签库5种标签库;
核心标签库:
指令:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
核心标签库主要用于完成jsp页面的常用功能,其中包括JSTL的表达式标签、条件标签、循环标签、和URL操作共4种标签
格式标签库:
指令:<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
格式标签库提供了一个简单的国际化(I18N)标记,用于处理国际化相关问题,另外,格式标签库种还包含用于格式化数字和日期显示格式的标签;
SQL标签库
指令:<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
SQL标签库封装了数据库访问的通过逻辑,简化了对数据库的访问,如果结合核心标签库,可以方便的获取结果集,并迭代输出结果集中的数据;
XML标签库
指令:<%@ taglib prefix="xml" uri="http://java.sun.com/jsp/jstl/xml"%>
XML标签库可以处理和生成XML标记,使用这些标记可以很方便的开发基于XML的web应用;
函数标签库
指令:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
函数标签库提供了一系列字符串操作函数,用于完成分解字符串、连接字符串、返回子串、确定字符串是否包含特定的字串等功能
要使用这些标签库必须在jsp首行使用<%@ taglib%>指令定义标签库的位置和访问前缀,并且要导入jstl.jar;
表达式标签
表达式标签主要包括<c:out>,<c:set>,<c:remove>,<c:catch>4个标签
<c:out>输出标签:
<c:out>标签用于将表达式的值输出到jsp页面中,该标签可以替代<%=表达式%>,类似于jsp内置对象out,<c:out>标签有如下两种写法,
没有标签体
<c:out value="expression" [escapeXml="true|false"] [defaultValue]/>
有标签体
<c:out value="expression" [escapeXml="true|false"]>
defaultValue
</c:out>
<c:out>标签属性说明:
属性 | 类型 | 描述 | 使用EL |
---|---|---|---|
value | Object | 用于指定将要输出的变量或表达式 | 可以 |
escapeXml | boolean | 用于指定是否转化特殊字符,默认为true,表示转换,如"<"转换成"<" | 不可以 |
default | Object | 用于指定当value属性值等于null时,将要显示的默认值 | 不可以 |
<c:out value="我要离职<hr>" escapeXml="true" default="无"/>
<%--escapeXml属性为false时--%>
<c:out value="我要离职<hr>" escapeXml="false" default="无"/>
<c:set>设置标签
<c:set>标签用于在指定范围(page,request,session,application)内定义保存某个值的变量,或为指定的对象设置属性值,使用该标签可以在页面中定义变量,而不用在jsp中嵌入java代码
<c:set>有以下4中语法:
1:在scope指定的范围内将变量值存储到变量中:
<c:set value="value" var="name" scope="page|request|session|application"/>
2:在scope指定的范围内将标签主体存储到变量中:
<c:set var="name" scope="page|request|session|application">
标签主体
</c:set>
3:将变量值存储在target属性指定的目标对象的propName属性中:
<c:set value="value" var="name" target="Object" property="propertyName"/>
4:将标签主体存储到target属性指定的目标对象的propName属性中
<c:set target="Object" property="propName">
标签主体
</c:set>
下面是上面语法设计的属性说明:
属性 | 类型 | 描述 | 引用EL |
---|---|---|---|
value | Object | 用于指定变量值 | 可以 |
var | String | 用于指定变量名 | 不可以 |
target | Object | 用于指定存储变量值或者标签主体的目标对象,可以是javaBean或Map集合对象 | 可以 |
property | String | 用于指定目标对象存储数据的属性名 | 可以 |
scope | String | 用于指定变量的作用域,默认值是page | 不可以 |
<c:remove>移除标签
<x:rewmove>标签可以从指定的jsp范围内移除指定的变量,语法格式如下:
<c:remove var="name" scope="page|request|session|application"></c:remove>
var: 用于指定要移除的变量名称;
scope:用于指定变量的存在范围,可选值有page,request,session,application,默认值为page,如果在该标签中没有指定变量的有效范围,那么将分别在page,request,session和application的范围内
查找要移除的变量并移除,例如,在一个页面中,存在不同范围的两个同名变量,当不指定范围时移除该变量,这两个范围内的变量都将被移除,因此,在移除变量时,最好指定变量的有效范围;
<c:catch>捕获异常标签
<c:catch>标签用于捕获程序中出现的异常,如果需要它还可以将异常信息保存在指定的变量中,该标签与java语言中的try{}catch(exception){}语句类似,<c:catch>标签语法如下:
<c:catch var="exception">
//可能存在异常的代码
</c:catch>
var为可选属性,用于指定存储异常信息的变量,如果不需要保存异常信息,可以省略该属性;
<c:catch var="exception">
<%
int number = Integer.parseInt(request.getParameter("number"));
out.println("金额为:" + 500*number);
%>
</c:catch>
<c:out value="${exception}"></c:out>
流程控制标签
<c:if>条件控制标签
<c:if>虽然没有对应的else标签,但是利用JSTL提供的<c:choose>,<c:when>和<c:otherwise>标签也可以实现if else功能
<c:if>有两种语法格式:
1:可判断条件表达式,并将条件的判断结果保存在var属性指定的变量中,而这个变量存在于scope属性所指定的范围内:
<c:if test="condition" var="name" scope="page|request|session|application"></c:if>
2:不但可以将test属性的判断结果保存在指定范围的变量中,还可以根据条件的判断结果执行标签主体,标签主体可以是jsp页面能够使用的任何元素,如html标记,java代码或者嵌入的其它jsp标签:
<c:if test="condition" var="name" scope="page|request|session|application">
标签主体
</c:if>
以上语法设计的属性说明表:
属性 | 类型 | 描述 | 引用EL |
---|---|---|---|
test | boolean | 必选属性,用于指定条件表达式 | 可以 |
var | String | 可选属性,用于指定变量名,这个属性会指定test属性的判断结果将存在哪个变量中,如果该变量不存在就创建它 | 不可以 |
scope | String | 存储范围,该属性用于指定var属性所指定的变量的存在范围 | 不可以 |
<c:choose>标签可以根据不同的条件完成指定的业务逻辑,如果没有符合的条件,则会执行默认条件的业务逻辑,需要注意的是<c:choose>标签只能作为<c:when>和<c:otherwise>标签的父标签,可以在其中
嵌套这两个标签完成条件的选择逻辑,这三个标签的语法如下:
<c:choose>
<c:when test="condition">
</c:when>
<c:when test="condition">
</c:when>
<%--此标签可以有多个--%>
<c:otherwise>
<%--此标签只能有一个,并且必须在<c:when>后面--%>
</c:otherwise>
</c:choose>
<c:forEach>循环标签
<c:forEach>标签可以根据循环条件遍历数组和集合类中所有或部分数据,例如在hibernate访问数据库,返回的基本都是数组、List、Map对象,这时候使用<c:forEach>标签循环显示这些数据可以解决jsp页面混乱的问题,
还提高了代码的可维护性
<c:forEach>有以下两种语法格式:
1:数字索引迭代
<c:forEach begin="start" end="end" var="name" varStatus="statusName" step="step">
标签主体
</c:forEach>
在这个语法中,begin和end属性是必选属性,其它属性均为可选属性
2:集合成员迭代
<c:forEach items="data" var="name" begin="start" end="end" step="step" varStatus="statusName">
标签主体
</c:forEach>
在该语法中,items属性是必选属性,通常使用EL表达式指定,其它属性均为可选属性;
<c:forEach>标签各属性说明:
属性 | 类型 | 描述 | 引用EL |
---|---|---|---|
items | 数组、集合类、字符串和枚举类型 | 被循环遍历的对象,多用于数组和集合类 | 可以 |
var | String | 循环体的变量,用于存储items指定的对象的成员(只在循环体类有效) | 不可以 |
begin | int | 循环的起始位置,如果没有指定,则从集合的第一个值开始迭代 | 可以 |
end | int | 循环的终止位置,如果没有指定,则一直迭代到集合的最后一位 | 可以 |
step | int | 循环的步长(每次循环自增的数字,缺省值为1,类似于i++) | 可以 |
varStatus | String | 循环的状态信息,可以取index,count,first,last等值 | 不可以 |
<c:forTokens>迭代标签
<c:forToken>标签可以用指定的分隔符将一个字符串分隔开,根据分割的数量确定循环的次数,其语法如下:
<c:forTokens items="String" delims="char" var="name" begin="start" end="end" step="len" varStatus="statusName">
标签主体
</c:forTokens>
其标签属性说明如下:
属性 | 类型 | 描述 | 引用EL |
---|---|---|---|
items | String | 被循环遍历的对象,多用于数组与集合类 | 可以 |
delims | String | 字符串的分割字符,可以同时有多个分割字符 | 不可以 |
var | String | 变量名称 | 不可以 |
begin | int | 循环的起始位置 | 可以 |
end | int | 循环的结束位置 | 可以 |
step | int | 循环的步长 | 可以 |
varStatus | String | 循环的状态变量 | 不可以 |
URL操作标签
URL操作标签是指与文件导入,重定向,URL地址生成以及参数传递相关的标签,JSTL中提供的与URL相关的标签有<c:import>,<c:url>,<c:redirect>和<c:param>4个;
<c:import>文件导入标签
<c:import>标签可以导入站内或其他网站的静态和动态文件的web页面中,例如,使用<c:import>标签导入其他网页的天气信息到自己的网页中,而<jsp:include>只能导入站内资源,相比之下,
<c:import>的灵活性更高;
<c:import>标签语法包含两种:
<c:import url="url" context="context" var="name" scope="page|request|session|application" charEncoding="GBK">
标签主体
</c:import>
<c:import url="url" varreader="name" context="context" charEncoding="GBK"></c:import>
下面是上面语法涉及的属性说明:
属性 | 类型 | 描述 | 引用EL |
---|---|---|---|
url | String | 被导入的文件资源的URL路径 | 可以 |
context | String | 上下文路径,用于访问同一个服务器的其他web工程,其值必须以/开头,如果指定了该属性,那么url属性值也必须以/开头 | 可以 |
var | String | 变量名称,将获取的资源存储在变量中 | 不可以 |
scope | String | 变量的存在范围 | 不可以 |
varReader | String | 以Reader类型存储被包含文件内容 | 不可以 |
charEncoding | String | 被导入文件的编码方式 | 可以 |
<c:redirect>重定向标签
<c:redirect>标签可以将客户端发出的request请求重定向到其他URL服务端,由其他程序处理可以的请求,而在此期间可以对request请求中的属性进行修改或添加,然后把所有属性传递到目标路径,
该标签有如下两种语法格式:
1:没有标签主体,并且不添加传递到目标路径的参数信息
<c:redirect url="http://www.baidu.com" context="/context"/>
2:将客户请求重定向到目标路径,并且在标签主体中使用<c:param>标签传递其他参数信息
<c:redirect url="http://www.baidu.com">
<c:param name="action" value="query"/>
<%--可以有多个<c:param>--%>
</c:redirect>
url:必选属性,用于指定待定向资源的URL,可以使用EL
context:用于在使用相对路径访问外部context资源时指定资源的名称;
<c:url>生成URL地址标签
<c:url>标签用于生成一个URL路径的字符串,这个生成的字符串可以赋予HTML的<a>标签实现URL的连接,或者用这个生成的URL字符串实现网页转发与重定向等,在使用该标签生成的URL时,还可以
与<c:param>标签相结合动态添加URL的参数信息,<c:url>标签的两种语法格式如下:
<c:url value="index.jsp" var="name" scope="session" context="/context"></c:url>
<c:url value="http://www.baidu.com" var="name" scope="session">
<c:param name="user" value="国足"></c:param>
</c:url>
<c:redirect url="${name}"></c:redirect>
<c:url>标签属性说明
属性 | 类型 | 描述 | 引用EL |
---|---|---|---|
value | String | 将要处理的URL地址 | 可以 |
context | String | 上下文路径,用于访问同一个服务器的其他web工程,其值必须以/开头,如果指定了该属性,那么url属性值也必须以/开头 | 可以 |
var | String | 变量的名称,将获取的资源存储在变量中 | 不可以 |
scope | String | 变量的存在范围 | 不可以 |
<c:param>参数传递标签
<c:param>标签只用于为其他标签提供参数信息,它与<c:import>,<c:redirect>和<c:url>标签组合可以实现动态定制参数,从而完成更复杂的程序应用
<c:param>的语法格式如下:
<c:param name="user" value="国足"></c:param>
name:用于指定参数名称,可以引用EL
value:用于指定参数值