在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行为、行为只能提供一小部分的功能,大多数的时候还是会用java脚本,接着就使用了EL表达式,基本上EL表达式看似能满足我们的要求,它能够获取各种对象,各种值,并且还不会抛出NullPointerException之类的错误,但是EL表达式功能还是有限,例如不能遍历集合等,因此为了完善JSP,让其完全不使用java代码,就有了jstl标签库,使用jstl和EL的配合使用,基本上可以实现所有的功能,显示数据,遍历数据等。
为什么使用标签?
JSP是用来显示数据的,前面我们在JSP中的HTML中嵌入java代码,与<%%>等混在一起,可读性和可维护性都很差,而且使用java脚本不便于代码重用,要实现比较复杂的显示功能,也不方便,而JSP标签和HTML代码很类似,使用JSP标签显得JSP整洁而干净,可读性好,标签能够重复使用,所以就像我们上面说的,我们慢慢意识到不足,就自然在一步步改进,从使用JSP行为,使用EL,在使用标签,都是为了一个目的,让JSP更加完全,方便,只显示数据,而不嵌入逻辑代码。这个涉及到了分层思想,后面说讲解到。
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
根据JSTL标签所提供的功能,可以将其分为5个类别。
核心标签是最常用的JSTL标签。引用核心标签库的语法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
程序示例
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
运行结果如下:
<要显示的数据对象(未使用转义字符)>
<要显示的数据对象(使用转义字符)>
使用的表达式结果为null,则输出该默认值
这个标签之所以很有用呢,是因为它会计算表达式的值,然后使用计算结果来设置 JavaBean 对象或 java.util.Map 对象的值。
语法格式
var=" value=" target=" property=" scope=" 属性 如果指定了target属性,那么property属性也需要被指定。 JSP 标准标签库JSP 标准标签库 这个标签不是特别有用,不过可以用来确保JSP完成清理工作。 语法格式 属性 实例演示 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
salary 变量值:
删除 salary 变量后的值:
运行结果如下:
salary 变量值: 4000
删除 salary 变量后的值:
JSP 标准标签库JSP 标准标签库
语法格式
...
属性
实例演示
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<% int x = 5/0;%>
异常为 : ${catchException}
发生了异常: ${catchException.message}
以上实例运行结果:
异常为 : java.lang.ArithmeticException: / by zero
发生了异常: / by zero
JSP 标准标签库JSP 标准标签库
语法格式
...
属性
演示实例
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
我的工资为:
运行结果如下:
我的工资为: 4000
JSP 标准标签库JSP 标准标签库
switch语句中有case,而
语法格式
...
...
...
...
...
属性
实例演示
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
你的工资为 :
太惨了。
不错的薪水,还能生活。
什么都没有。
运行结果如下:
你的工资为 : 4000
不错的薪水,还能生活。
举例来说,使用
语法格式
url=" var=" scope=" varRender=" context=" charEncoding=" 属性 实例演示 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
以上程序将会打印http://www.baidu.com"页面的源代码,您可以自己动手尝试一下。
这些标签封装了Java中的for,while,do-while循环。
相比而言,
forEach 语法格式
items=" begin=" end=" step=" var=" varStatus=" forTokens 语法格式 items=" delims=" begin=" end=" step=" var=" varStatus=" 属性 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Item
运行结果如下:
Item 1
Item 2
Item 3
Item 4
Item 5
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
运行结果如下:
runoob
taobao
语法格式
属性
c:redirect标签有如下属性:
实例演示
如果你需要向
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
浏览器打开以上页面将跳转至 http://www.baidu.com。
这个标签在需要的时候会自动重写URL。
var属性用于存储格式化后的URL。
语法格式
var=" scope=" value=" context=" 属性 实例演示 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
这个链接通过
JSP 标准标签库JSP 标准标签库
在
语法格式
属性
程序示例
如果想要向
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
使用
JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
下面就常用的fmt标签(数字、日期格式)做一下解释。
语法格式
value=" type=" pattern=" currencyCode=" currencySymbol=" groupingUsed=" maxIntegerDigits=" minIntegerDigits=" maxFractionDigits=" minFractionDigits=" var=" scope=" 属性 如果type属性为percent或number,那么您就可以使用其它几个格式化数字属性。maxIntegerDigits属性和minIntegerDigits属性允许您指定整数的长度。若实际数字超过了maxIntegerDigits所指定的最大值,则数字将会被截断。 有一些属性允许您指定小数点后的位数。minFractionalDigits属性和maxFractionalDigits属性允许您指定小数点后的位数。若实际的数字超出了所指定的范围,则这个数字会被截断。 数字分组可以用来在每三个数字中插入一个逗号。groupingIsUsed属性用来指定是否使用数字分组。当与minIntegerDigits属性一同使用时,就必须要很小心地来获取预期的结果了。 您或许会使用pattern属性。这个属性可以让您在对数字编码时包含指定的字符。接下来的表格中列出了这些字符。 实例演示 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
格式化数字 (1): type="currency"/>
格式化数字 (2): maxIntegerDigits="3" value="${balance}" />
格式化数字 (3): maxFractionDigits="3" value="${balance}" />
格式化数字 (4): groupingUsed="false" value="${balance}" />
格式化数字 (5): maxIntegerDigits="3" value="${balance}" />
格式化数字 (6): minFractionDigits="10" value="${balance}" />
格式化数字 (7): maxIntegerDigits="3" value="${balance}" />
格式化数字 (8): pattern="###.###E0" value="${balance}" />
美元 :
运行结果如下:
数字格式化:
格式化数字 (1): ¥120,000.23
格式化数字 (2): 000.231
格式化数字 (3): 120,000.231
格式化数字 (4): 120000.231
格式化数字 (5): 023%
格式化数字 (6): 12,000,023.0900000000%
格式化数字 (7): 023%
格式化数字 (8): 120E3
美元 : $120,000.23
语法格式
value=" type=" pattern=" parseLocale=" integerOnly=" var=" scope=" 属性 pattern属性与 实例演示 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
数字解析 (1) :
type="number" value="${balance}" /> 数字解析 (2) :
运行结果如下:
数字解析:
数字解析 (1) : 1250003.35
数字解析 (2) : 1250003
语法格式
value=" type=" dateStyle=" timeStyle=" pattern=" timeZone=" var=" scope=" 属性 实例演示 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
日期格式化 (1): value="${now}" />
日期格式化 (2): value="${now}" />
日期格式化 (3): value="${now}" />
日期格式化 (4): dateStyle="short" timeStyle="short" value="${now}" />
日期格式化 (5): dateStyle="medium" timeStyle="medium" value="${now}" />
日期格式化 (6): dateStyle="long" timeStyle="long" value="${now}" />
日期格式化 (7): value="${now}" />
以上实例运行结果:
日期格式化:
日期格式化 (1): 11:19:43
日期格式化 (2): 2016-6-26
日期格式化 (3): 2016-6-26 11:19:43
日期格式化 (4): 16-6-26 上午11:19
日期格式化 (5): 2016-6-26 11:19:43
日期格式化 (6): 2016年6月26日 上午11时19分43秒
日期格式化 (7): 2016-06-26
语法格式
value=" type=" dateStyle=" timeStyle=" pattern=" timeZone=" parseLocale=" var=" scope=" 属性 实例演示 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
pattern="dd-MM-yyyy" /> 解析后的日期为:
以上实例运行结果:
日期解析:
解析后的日期为: Tue Oct 20 00:00:00 CST 2015
JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
fn:contains()函数
JSP 标准标签库JSP 标准标签库
fn:contains()函数用于确定一个字符串是否包含指定的子串。
语法
fn:contains()函数的语法如下:
...
实例演示
以下实例演示了这个函数的功能:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
找到 langsin
找到 LANGSIN
运行结果如下:
找到 langsin
fn:indexOf()函数
JSP 标准标签库JSP 标准标签库
fn:indexOf()函数返回一个字符串中指定子串的位置。
语法
fn:indexOf()函数的语法如下:
${fn:indexOf(<原始字符串>,<子字符串>)}
实例演示
以下实例演示了这个函数的功能:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
Index (1) : ${fn:indexOf(string1, "first")}
Index (2) : ${fn:indexOf(string2, "second")}
运行结果如下:
Index (1) : 8
Index (2) : 13
fn:join()函数
fn:join()函数将一个数组中的所有元素使用指定的分隔符来连接成一个字符串。
语法
fn:join()函数的语法如下:
${fn:join([数组], <分隔符>)}
实例演示
以下实例演示了这个函数的功能:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
字符串为 : ${string3}
注意:fn:split函数返回一个字符串用指定分隔符分裂为一个子串数组。
运行结果如下:
字符串为 : www-runoob-com
fn:trim()函数
fn:trim()函数将字符串两端的空白符移除。
语法
fn:trim()函数的语法如下:
${fn:trim(
实例演示
以下实例演示了这个函数的功能:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
string1 长度 : ${fn:length(string1)}
string2 长度 : ${fn:length(string2)}
字符串为 : ${string2}
运行结果如下:
string1 长度 : 25
string2 长度 : 16
字符串为 : I am from runoob
JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签。引用SQL标签库的语法如下:
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
举例:
不常用。