一、JSTL简介
标准标签库 JSTL 的全名为 Java Server Pages Standard Tag Library。它是由 JCP( Java CommnunityProcess)所指定的标准规范,它主要是给 Java Web 开发者提供了一个标准的通用标签库。通过 JSTL,可以部分地取代传统 JSP 程序中嵌入 Java 代码的做法,可以使得 JSP 页面程序的风格趋于统一,并且容易维护。
从 JSP1.1 规范开始就开发支持在 JSP 文件中使用自定义标签了,就是因为自定义标签的广泛使用,从而使得大量的同功能标签不断地重复定义,为了减少对解决类似通用问题的独立标记库的需求,在Java Community Process( JSR 52)的赞助下创建了 JSTL( JavaServer Pages Standard Tag Library, JSTL)标准标记库,为解决这些通用功能提供一个单一的标准解决方案。
JSTL 是一个开放源代码的 JSP 标签库,并且还在不断地完善过程中。 JSTL 特别为条件处理、迭代、国际化、数据库访问和可扩展标记语言( XML)处理提供支持。 JSTL 还引入了 expression language( EL,表达式语言),极大地简化了对 JSP 中应用数据的访问和操作。
JSTL 至今主要为开发者提供了如下五大类的标签库:
- 核心标签库:为日常任务提供通用支持,如显示和设置变量、重复使用一组项目、测试条件以及其他操作(如导入和重定向 Web 页面等)。
- 国际化( I18N)标签库:支持多国语种的应用程序。
- SQL 标签库:对访问和修改数据库提供标准化支持。
- XML 标签库:对 XML 文件处理和操作的支持,包括 XML 节点的解析、迭代、基于 XML 数据的条件评估以及可扩展样式语言转换( Extensible Style Language Transformations, XSLT)的执行。
- 函数标签库:通过在 EL 表达式中调用函数标签库中的函数来实现特定的操作。例如${fn:contains(string, substring)},判断 string 字符串中是否包含 substring 字符串。
展示了各标签库的使用方法:
标签库 | URI | 前缀 | 使用模式 |
核心标签库 | http://java.sun.com/jstl/core | c | <c:tagname…> |
国际化( I18N)标签库 | http://java.sun.com/jstl/fmt | fmt | <fmt:tagname…> |
SQL标签库 | http://java.sun.com/jstl/sql | sql | <sql:tagname…> |
XML标签库 | http://java.sun.com/jstl/xml | x | <x:tagname…> |
函数标签库 | http://java.sun.com/jstl/functions | fn | fn:functionName() |
具体配置和引入方式可参考:JSTL配置&pom配置
JSTL(标准标签库)的使用对 JSP/servlet 开发者来说是一个重大的进展,因为它存在很多的优点,并且很有可能在不久的将来成为实现动态、基于 Java 站点的一个主要方法。概括起来, JSTL 主要的优点如下:
- 在所有的应用服务器之间提供了一致的接口程序,这样可以最大程度地提供 Web 应用程序在各种应用服务器之间的可移植性。
- 简化了 JSP 的 Web 应用系统的开发,并且使得 JSP 页面的编程风格统一、易于维护。
- 大量使用 JSTL 提供的逻辑操作(例如迭代、判断,甚至数据库访问),可以大大减少 JSP 中脚本代码( Scriptlets)的数量,甚至可以没有任何脚本代码就可以实现其大部分动态效果。
- 运行 JSP 设计工具与 Web 应用程序开发的进一步集成,虽然现在支持 JSTL 开发的 IDE 开发工具还没有出现(或者正是由于这个原因,使得 JSTL 还不这么流行),但是可以相信不久就会有支持JSTL 的开发工具出现。
JSTL 已经封装了 JSP 中很多常用的功能,比如,可以使用 JSTL 中的标签来进行迭代输出某个 List或者 Set 集合类。
注意:由于从 JSP1.1 规范才开始支持 JSP 中的自定义标签,所以 JSTL 需要运行在支持 JSP1.2 和Servlet2.3 规范的容器上,比如 Tomcat4.x 和 Tomcat5.x 服务器。
二、详细介绍
注:下面只列举出主要的知识点,详细的会链接到<菜鸟教程>,当然也可以直接参考菜鸟教程。而且下面讲述的都是在已经配置好JSTL环境的条件下进行的。
注:在JSTL标签中运用到了EL表达式,像${}这样的语法,了解EL表达式可以参考:EL表达式—学习笔记
2.1 核心标签库
核心标签是最常用的JSTL标签,引用核心标签库的语法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
分类:
- 表达式操作标签:表达式操作标签包括 out、 set、 remove 和 catch
- 流程控制标签:用于流程控制的标签,其中包括: if、 choose、 when 与 otherwise 等
- URL相关的标签:与 URL 相关的标签主要是用来将其他文件包含进来,或者提供页面之间的重定位以及 URL 地址的生成、参数的输出等等。包括如下几个标签
- <c:import>标签:与传统 JSP 页面中的<jsp:include>标记相类似
- <c:redirect>标签:进行页面的重定位
- <c:url>:主要是用来重写 URL 地址
- <c:param>:一般 param 标签会和别的标签一起配套使用,用于参数值的传递
详细标签
标签 | 描述 |
---|---|
<c:out> | 用于在JSP中显示数据,就像<%= ... > |
<c:set> | 用于保存数据 |
<c:remove> | 用于删除数据 |
<c:catch> | 用来处理产生错误的异常状况,并且将错误信息储存起来 |
<c:if> | 与我们在一般程序中用的if一样 |
<c:choose> | 本身只当做<c:when>和<c:otherwise>的父标签 |
<c:when> | <c:choose>的子标签,用来判断条件是否成立 |
<c:otherwise> | <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行 |
<c:import> | 检索一个绝对或相对 URL,然后将其内容暴露给页面 |
<c:forEach> | 基础迭代标签,接受多种集合类型 |
<c:forTokens> | 根据指定的分隔符来分隔内容并迭代输出 |
<c:param> | 用来给包含或重定向的页面传递参数 |
<c:redirect> | 重定向至一个新的URL. |