JSTL是一个不断完善的开放源代码的JSP标签库,使用JSTL可以取代在传统JSP程序中嵌入Java代码的做法,大大提高程序的可维护性。

JSTL包含五类标准标签库,它们分别是核心标签库国际化/格式化标签库SQL标签库XML标签库函数标签库在使用这些标签库之前,必须在JSP页面的顶部使用<%@taglib%>指定定义引用的标签库和访问前缀。

以下为此五种标签库的引用指令格式和作用:

(1)使用核心标签库的taglib指令格式

<%@ taglib prefix="c" url="http:/java.sun.com/jsp/jsp1/core" %>

核心标签库主要用于完成JSP页面的常用功能,包括JSTL的表达式标签、URL标签、流程控制标签。例如用于输出文本内容的<c:out>标签、用于条件判断的<c:if>标签等等

(2)使用格式标签库的taglib指令格式

<%@ taglib prefix="fmt" url="http:/java.sun.com/jsp/jsp1/fmt" %>

国际化/格式化标签库包含实现Web应用程序的国际化标签和格式化标签。例如设置JSP页面的本地信息,设置JSP页面的时区等等

(3)使用SQL标签库的taglib指令格式

<%@ taglib prefix="sql" url="http:/java.sun.com/jsp/jsp1/sql" %>

SQL标签库包含用于访问和操作数据库的标签。例如数据库连接、从数据库中检索数据等。因为在软件分层开发模型中,JSP页面仅作为显示层,一般不会在JSP页面直接操作数据库,所以SQl标签库不常用

(4)使用XML标签库的taglib指令格式

<%@ taglib prefix="xml" url="http:/java.sun.com/jsp/jsp1/xml" %>

XML标签库包含对XML文档中的数据进行操作的标签,例如解析XML文件、输出XML文档中的内容,以及迭代处理XML文档中的元素。XML广泛应用于Web开发,使用XML标签库处理XML文档更加简单方便

(5)使用函数标签库的taglib指令格式

<%@ taglib prefix="fn" url="http:/java.sun.com/jsp/jsp1/functions" %>

函数标签库提供了一套自定义EL函数,包含JSP网页制作者经常要用到的字符串操作

1、JSTL中的Core标签库

1.1 表达式标签

  • <c:out>

作用:将一段文本内容或表达式的结果输出到客户端(如果文本中包含需要转义的特殊字符,则该标签会先进行HTML编码转换后再输出)

语法格式:

(1)没有标签体的情况

<c:out value="value" [default="defaultValue"] [escapeXml="{true|false}"]  />

(2)有标签体的情况

<c:out value="value" [escapeXml="{true|false}"]>

        defaultValue

</c:out>

没有标签体的情况下需要使用default属性指定默认值,有标签体的情况下在标签体中指定输出的默认值。

参数:

[ ]方括号内的属性为可选

value属性用于指定输出的文本内容

default属性用于指定当value为null时输出的默认值,默认为空字符串

escapeXml属性用于指定是否将<、>、&等特殊字符进行HTMl编码转换后在输出,默认为真

  • <c:remove>

作用:用于移除指定的JSP范围内的变量

语法格式:

<c:remove var="name" [scope="范围"] />

参数:

var:用于指定要移除的变量名

scope:用于指定变量的有效范围,可选值有page、request、session和application,默认为page。如果在该标签中没有指定变量的有效范围,那么将分别在page、request、session和application的范围内查找该变量并移除,即在一个页面中,存在不同范围的多个同名变量时,会全部移除

1.2 流程控制标签

  • <c:if>

作用:用于条件判断

语法格式:

(1)没有标签体的情况

<c:if test="testCondition" var="result" 
 [scope="{page|request|session|application}"] />   

(2)有标签体的情况

<c:if test="testCondition" var="result" [scope="{page|request|session|application}"]>  
    body content
</c:if>

参数:

test属性:用于设置逻辑表达式

var属性:用于指定逻辑表达式中变量的名字

scope属性:用于指定var变量的作用范围,默认为page

  • <c:choose>和<c:when>、<c:otherwise>

<c:choose>标签没有属性,它必须与<c:when><c:otherwise>一起使用

在<c:choose>标签体中只能嵌套一个或多个<c:when>标签、零个或一个<c:otherwise>标签,并且<c:when>标签必须出现在<c:otherwise>标签前

<c:choose>标签语法格式:

<c:choose>
    Body content(<when> and <otherwise> subtags)
</c:choose>

<c:when>标签语法格式:

<c:when test="testCondition">
    Body content
</c:when>

<c:otherwise>标签语法格式:

<c:otherwise>
    conditional block
</c:otherwise>

这三个标签中只有<c:when>标签有一个test属性来用于条件判断,而<c:otherwise>标签作为 最后的分支,即前面的条件都不成立时才执行输出

1.3 循环标签

在JSP页面中经常需要对集合对象进行循环迭代操作,所以Core标签库提供了一个<c:forEach>标签来用于迭代集合对象(Set、List、Map、数组等)中的元素

(1)迭代包含多个对象的集合

<c:forEach [var="varName"] items="collection"
 [varStatus="varStatusName"] [begin="begin"]
 [end="end"] [step="step"]>
    body content
</c:forEach>

(2)迭代指定范围内的集合

<c:forEach [var="varName"] [varStatus="varStatusName"] 
 begin="begin" end="end" [step="step"]>
    body content
</c:forEach>

参数:

var属性:用于将当前迭代到的元素保存到page域中的名称

items属性:用于指定将要迭代的集合对象

varStatus属性:用于指定将当前迭代状态信息的对象保存到page域中的名称

begin属性:用于指定从集合的第几个元素开始迭代(如果没有指定items属性则从begin指定的值开始迭代到结束为止)

step属性:用于指定迭代的步长,即迭代因子的增量

1.4 URL相关标签

在开发Web应用程序时,通常会在JSP页面中实现URL的重新以及重定向等特殊功能,所以Core标签库也提供了相关标签

  1. <c:param>用于获取URL地址中的附加参数
  2. <c:url>用于按特定的规则重新构造URL
  3. <c:redirect>负责重定向

<c:param>通常嵌套在<c:url>内使用

<c:param>语法格式:

(1)使用value属性指定参数的值

<c:param name="name" value="value">

(2)在标签体中指定参数的值

<c:param name="name">
    parameter value
</c:param>

参数:

name属性:用于指定参数的名称

value属性:用于指定参数的值,当使用<c:param>标签为一个URL地址附加参数时,它会自动对参数值进行URL编码。例如,传递的参数值为“中国”,则将其转换为“%e4%b8%ad%e5%9b%bd”后再附加到URL地址后面,这也是使用该标签的最大好处

<c:url>语法格式:

(1)没有标签实体的情况

<c:url value="value" 
 [context="context"] [var="varName"]
 [scope="page|request|session|application"]>

(2)有标签实体的情况,在标签体内指定构造的URL参数

<c:url value="value" 
 [context="context"] [var="varName"]
 [scope="page|request|session|application"]>
    <c:param>标签
</c:url>

参数:

value属性:用于指定构造的URL

context属性:用于指定导入同一个服务器下其他Web应用的名称

var属性:用于指定将构造的URL地址保存到域对象的属性名称

scope属性:用于将构造好的URL保存到域对象中

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐