目录

Jsp笔记

jsp fmt标签详解

JSTL标签提供了对国际化(I18N)的支持,它可以根据发出请求的客户端地域的不同来显示不同的语言。同时还提供了格式化数据和日期的方法。实现这些功能需要I18N格式标签库(I18N-capable formation tags liberary)。引入该标签库的方法为:

1
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

I18N格式标签库提供了11个标签,这些 标签从功能上可以划分为3类如下:

(1)数字日期格式化。formatNumber标签、formatData标签、parseNumber标签、parseDate标签、timeZone标签、setTimeZone标签。

(2)读取消息资源。bundle标签、message标签、setBundle标签。

(3)国际化。setlocale标签、requestEncoding标签。

接下将详细介绍这些标签的功能和使用方式。

9.3.1 数字日期格式化

数字日期格式化标签共有6个,用来将数字或日期转换成设定的格式。

1.<frm:formatNumber/>标签

该标签依据特定的区域将数字改变为不同的格式来显示。

【语法1】:

1
2
3
4
<frm:formatNumber value=”被格式化的数据”[type=”number|currency|percent”][pattern=”pattern”]
[currencyCode=”code”][currencySymbol=”symbol”][groupingUsed=”true|false”]
[maxIntergerDigits=”maxDigits”][minIntergerDigits=”minDigits”][maxFractionDigits=”maxDigits”]
[minFractionDigits=”minDigits”][var=”name”][scope=page|request|session|application]/>

【语法2】:

1
2
3
4
<frm:formatNumber [type=”number|currency|percent”][pattern=”pattern”][currencyCode=”code”]
[currencySymbol=”symbol”][groupingUsed=”true|false”][maxIntergerDigits=”maxDigits”]
[minIntergerDigits=”minDigits”][maxFractionDigits=”maxDigits”][minFractionDigits=”minDigits”]
[var=”name”][scope=page|request|session|application]\> 

<fmt:formatNumber>标签参数说明:

名称 说明 EL 类型 必须 默认值
value 要格式化的数据 String
type 指定类型(单位、货币、百分比等)见表 String number
pattern 格式化的数据样式 String
currencyCode 货币单位代码 String
cuttencySymbol 货币符号($、¥) String
groupingUsed 是否对整数部分进行分组如(9,999) boolean true
maxIntergerDigits 整数部分最对显示多少位数 int
minIntergerDigits 整数部分最少显示多少位 int
maxFractionDigits 小数部分最多显示多少位 int
minFractionDigits 小数部分最少显示多少位 int
var 存储格式化后的数据 String
scope var的JSP范围 String page

Type属性的类型应用:.

类型 说明 示例
number 数字格式 0.8
currency 当地货币 ¥0.80
percent 百分比格式 80%

【示例代码】:实现了对数字的格式化、货币的格式、货币的格式化。使用<frm:formatNumber>的各种属性的设定。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<table border=1 cellpadding="0" cellspacing="0" align="center">
<tr align="center">
<td width="100">类型 </td>
<td width="100">使用数据</td>
<td width="100">结果</td>
<td width="300">说明</td>
 </tr>
 <tr>
 <td>数字格式化</td><td>108.75</td>
 <td><fmt:formatNumber type="number" pattern="###.#">108.75</fmt:formatNumber></td>
 <td>使用pattern可以定义显示的样式。本例设定为###.#小数部分将使用四舍五入法。</td>
 </tr>
 <tr>
 <td>数字格式化</td><td>9557</td>
 <td><fmt:formatNumber type="number" pattern="#.####E0">9557</fmt:formatNumber></td>
 <td>使用科学计数法。</td> 
 </tr>
 <tr>
 <td>数字格式化</td><td>9557</td>
 <td><fmt:formatNumber type="number" >9557</fmt:formatNumber></td>
 </td>
 <td>使用默认分组。</td>
 </tr>
 <tr>
 <td>数字格式化</td><td>9557</td>
 <td><fmt:formatNumber type="number" groupingUsed="false" >9557</fmt:formatNumber></td>
 <td>不使用分组。</td>
 </tr>
 <tr>
 <td>数字格式化</td><td>9557</td>
 <td><fmt:formatNumber type="number" maxIntegerDigits="3">9557</fmt:formatNumber></td>
 <td>使用位数限定,根据指定的位数显示,其他数字忽略。例如:9不被显示。</td>
 </tr>
 <tr>
 <td>百分比格式化</td><td>0.98</td>
 <td><fmt:formatNumber type="percent">0.98</fmt:formatNumber></td>
 <td>用百分比形式显示一个数据。</td>
 </tr>
 <tr>
 <td>货币格式化</td><td>188.88</td>
 <td><fmt:formatNumber type="currency" >188.8</fmt:formatNumber></td>
<td>将一个数据转化为货币形式输出。</td>
 </tr>
 <tr>
 <td>存储数据</td><td>188.88</td>
 <td><fmt:formatNumber type="currency" var="money">188.8</fmt:formatNumber>
 <c:out value="${money}"></c:out>
 </td>
 <td>存储的money的值为${money} </td>
 </tr>
 </table>

【代码说明】:

(1)从应用角度可以把属性分为三类:数字格式化、货币格式化、百分比格式化。使用type指定类型。

(2)应用于数字格式化的属性有:partten属性、maxIntegerDigits属性、minIntegerDigits属性、maxFractionDigits属性和minFactionDigits属性。其中partten属性在设定格式化样式时会比较准确如:四舍五入、科学计数法的使用。而使用maIntegerDirgits等属性时,只把设定位数以外的数字舍去。

(3)货币格式化可以使用数字格式化的所有属性。如果有必要建议使用partten属性。currencyCode属性和currencySymbol只用于货币格式化。

(4)百分比格式化使用到的属性为type属性、partten属性,设定type属性的类型为percent即可。

(5)使用var属性时,会将格式化后的值存在JSP的某个范围内(一个String类型的字符串包括符号等)。<frm:forNumber>将不再输出格式化后的值可以使用EL表达式输出。

(6)通用属性:type属性、partten属性、var属性和scope属性。

2.<frm:parseNumber>标签

将格式化后的数字、货币、百分比都转化为数字类型。

【语法1】:

1
2
<fmt:parseNumber value="number" [type=”number|currency|percent”][pattern=”pattern”]
[parseLocale=”locale”][intergerOnly=”true|false”][scope=”page|request|session|application”]/>

【语法2】:

1
2
3
4
<fmt:parseNumber [type=”number|currency|percent”][pattern=”pattern”] [parseLocale=”locale”]
[intergerOnly=”true|false”][scope=”page|request|session|application”]\> 
Number
</fmt:parseNumber

<fmt:parseNumber>标签参数说明:

名称 说明 EL 类型 是否必须 默认值
value 被解析的字符串 String
type 指定单位(数字、货币、百分比) String number
pattern 格式样式 String
parseLocale 用来替代默认区域的设定 String,Java.util.Locale 默认本地样式
var 存储已经格式化的数据 String
scope var变量的作用域 String page

<fmt:parseNumber>可以看作是<fmt:formatNumber>的逆运算。相应的参数和类型的配置和使用<fmt:formatNumber>格式化时相同。

【示例代码】:实现了从字符串中提取数据,并用合适的数据类型进行存储(浮点性、整型等)。可以对转换后的数据进行加法运算。

1
2
3
4
5
6
7
8
 <fmt:formatNumber type="currency" var="money">188.8</fmt:formatNumber>
 <li>格式化前的数据为:<c:out value="${money}"></c:out>
 <fmt:parseNumber var="money" type="currency">${money}</fmt:parseNumber>
 <li>格式化后的数据为:<c:out value="${money}"></c:out>
 <li>可以对格式化的后的数据进行运算: 
 <c:out value="${money+200}"></c:out>
 <li>对百分比进行格式化98%为:
 <fmt:parseNumber type="percent">98%</fmt:parseNumber>

【代码解析】:

(1)首先使用<fmt:formatNumber>将188.8转换为字符串¥188.8并在page范围内存储一个String类型的变量,变量名为money。

(2)使用<fmt:parseNumber>将¥188.8转化为浮点型的数据188.8并赋值为变量money,

则变量money转变为一个浮点型的值188.8,对188.8进行加运算。

(3)直接对一个百分比数98%进行转化。

【示例代码】:实现了保留两位小数

1
2
<fmt:formatNumber type="number" value="${br.price}" pattern="#.00"/>
<!--pattern="#.00"表示规定必须保存2位小数,如果最多保存2位,使用 pattern="#.##"-->

【代码解析】:将el表达式中的数字格式化为两位小数

3.<fmt:formatDate>标签

该标签主要用来格式化日期和时间。

【语法】:

1
2
3
<fmt: formatDate value=”date” [type=”time|date|both”][pattern=”pattern”]
[dateStyle=”default|short|medium|long|full”][timeStyle=”default|short|medium|long|full”]
[timeZone=”timeZone”][var=”name”][scope=”page|request|session|application”]/>

<fmt:formatDate>标签属性说明:

属性名 说明 EL 类型 必须 默认值
value 将要格式化的日期对象。 Java.util.Date
type 显示的部分(日期、时间或者两者)。 String date
partten 格式化的样式。 String
dateStyle 设定日期的显示方式。 String default
timeStyle 设定时间的显示方式。 String default
timeZone 设定使用的时区。 String 当地所用时区
var 存储已格式化的日期或时间。 String
scope 指定var存储的JSP范围。 String

type属性参数说明:

参数名 说明
time 只显示时间
date 只显示时期
both 显示日期和时间

【示例程序】:实现了对日期的格式化,使用了type、dateStyle、timeStyle等属性。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<fmt:formatDate value="${date}"></fmt:formatDate><br>
<fmt:formatDate value="${date}" type="both"></fmt:formatDate><br>
<fmt:formatDate value="${date}" type="both" dateStyle="default"
 timeStyle="default"></fmt:formatDate><br>
  <fmt:formatDate value="${date}" type="both" dateStyle="short"
 timeStyle="short"></fmt:formatDate><br>
  <fmt:formatDate value="${date}" type="both" dateStyle="long"
 timeStyle="long"></fmt:formatDate><br>
  <fmt:formatDate value="${date}" type="both" dateStyle="full"
timeStyle="full"></fmt:formatDate><br>
  <fmt:formatDate value="${date}" type="both" dateStyle="full"
timeStyle="full"></fmt:formatDate><br>

格式化Java返回的Date类型时间示例

jsp 循环获取的列表里有个时间属性。获取的格式为Mon Jan 02 00:00:00 cst 2017。

1
<input name="discoverTime"  value="${estiDetail.discoverTime}"   class="easyui-datebox"  style="width:100" disabled="disabled"/>${estiDetail.discoverTime}

这样datebox 的value里面获取的一直是当天的日期,并不是后台传过来的日期,如果放在input外面就能获取到,但是格式不对,就像这样

./1.png

解决方案:

引用jstl fmt标签

1
<input name="discoverTime"  value="<fmt:formatDate value="${estiDetail.discoverTime}" pattern="yyyy-MM-dd" />"   class="easyui-datebox"  style="width:100" disabled="disabled"/>

注意:是将<fmt:formatDate value="${estiDetail.discoverTime}" pattern="yyyy-MM-dd" />放在value里面

完美解决

./2.png

Java返回的Date示例结束

【代码解析】:

(1)首先通过配置JavaBean在页面上实例化java.util.Date对象。实现代码如下:

1
<jsp:useBean id="date" class="java.util.Date"></jsp:useBean>

(2)对日期对象进行格式化时${date}是一个日期对象,如果给value设的值为String时程序会报错。

(3)设置type为both时,将显示日期和时间,同时示例中依次改变dateStyle和timeStyle的值作为比较。

4.<fmt:parseDate>标签

<fmt:parseDate>标签主要将字符串类型的时间或日期转化为时间或日期对象。

【语法1】:

1
2
3
<fmt:parseDate value=”date” [type=”time|date|both”][pattern=”pattern”][parseLocale=”locale”]
[dateStyle=”default|short|medium|long|full”][timeStyle=”default|short|medium|long|full”]
[timeZone=”timezone”][var=”name”][scope=”page|request|session|application”]/>

【语法2】:

1
2
3
4
5
<fmt:parseDate [type=”time|date|both”][pattern=”pattern”][parseLocale=”locale”]
[dateStyle=”default|short|medium|long|full”][timeStyle=”default|short|medium|long|full”]
[timeZone=”timezone”][var=”name”][scope=”page|request|session|application”]\> 
Date
</fmt:parseDate>

<fmt:parseData>标签属性说明:

属性名 说明 EL 类型 必须 默认值
value 将要格式化的日期时间 String
type 字符串的类型(日期、时间或全部) EL String date
pattern 字符串使用的时间样式 String
parseLocale 取代默认地区设定 String 默认地区
dateStyle 字符串使用的日期显示方式 String default
timeStyle 字符串使用的时间显示格式 String default
timeZone 使用的时区 String 当地区时
var 使用var定义的名字保存对象 String
scope var的JSP范围 String page

【示例代码】:实现了以下功能:首先,使用了fmt:formatDate把一个日期对象格式化成一个日期的字符串,并把该字符串以参数名为a存储page范围内。其次,使用fmt:parseDate方法把a的值(字符串)格式化成一个Date并以参数名为b存储在page范围内。最后,使用Java脚本证明生成的b为对象。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<fmt:formatDate value="${date}" var="a" type="both"
dateStyle="full" timeStyle="full"></fmt:formatDate>
<fmt:parseDate var="b" type="both" dateStyle="full" timeStyle="full">
${a}
</fmt:parseDate>
  <%
  out.println(pageContext.getAttribute("b").toString());
  out.println("<br>");
  out.println(pageContext.getAttribute("b").hashCode());
  %>
  </body>
</html>

【代码解析】:

(1)使用<fmt:formatDate>把日期对象格式化成字符串。

(2)使用<fmt:parseDate>把字符串对象转化为日期对象,注意同(1)中的参数对比,可以发现两者是一个互逆的过程。

(3)使用Java脚本进行测试Date对象的toString()方法可以输出时间字符串。hashCode()可以得到一个对象的hashCode。该方法只能应用于对象,因此可以证明得到的是一个日期对象。

5.<fmt:setTimeZone>标签

该标签用于设定默认时区或者将时区存储在指定的JSP范围内。

【语法】:

1
<fmt:setTimeZone value=”value” [var=”name”][scope=”page|request|session|application”]/>

<fmt:setTimeZone>标签属性说明:

参数名 说明 EL 类型 必须 默认值
value 使用的时区 StringJava.util.TimeZone
var 使用var定义的参数名保存值 String
scope 存储var的JSP范围 String page

value用来设定使用的时区,例如中国使用的时区为CST,其他的还有EST、PST等。可以把时区存储在指定的JSP范围内,例如存储在session中,用户访问的所有页面都可以显示使用的设定的时区下对应的时间。

【示例代码】

1
<fmt:setTimeZone value=”EST” scope=”session”/>

提示:有关TimeZone的说明见JDK帮助文档的java.util.TimeZone类。

6.<fmt:timeZone>标签

该标签主要用于设置标签体内使用的时区。

【语法】:

1
2
3
<fmt:timeZone value=”timeZone”>
…..
</fmt:timeZone>

使用<fmt:timeZone></fmt:timeZone>只会应用到标签体内使用的时区,对标签外部将不产生影响。

9.3.2 读取消息资源

读取消息资源用到的标签主要有4个:<fmt:message>标签、<fmt:param>标签、<fmt:bundle>标签和<fmt:setBundle>标签。主要用于从资源文件中读取信息。

1.<fmt:bundle>标签

该标签主要用于将资源文件绑定于它的标签体中的显示。

【语法】:

1
2
3
<fmt:bundle basename=”name”[prefix=”prefix”]>
….标签主题
</fmt:bundle>

<fmt:bundle>标签属性说明:

参数名 说明 EL 类型 必须 默认值
basename 指定使用的资源文件的名称 String
prefix 前置关键字 String

2.<fmt:setBundle>标签

该标签主要用于绑定资源文件或者把资源文件保存在指定的JSP范围内。

【语法】:

1
<fmt:setBundle basename=”name” [var=”name”][scope=”page|request|session|application”]\> 

<fmt:setBundle>标签属性说明:

参数名 说明 EL 类型 必须 默认值
basename 指定使用的资源文件的名称 String
var 指定将资源文件保存的名称 String
scope 设定将资源文件保存的JSP范围 String page

3.<fmt:message>标签

该标签主要负责读取本地资源文件,从指定的消息文本资源文件中读取键值,并且可以将键值保存在指定的JSP范围内。

【语法1】:

1
<fmt:message key=”keyName”[bundle=”bundle”][scope=”page|request|session|application”]/>

【语法2】:

1
2
3
<fmt:message key=”keyName”[bundle=”bundle”][scope=”page|request|session|application”]\> 
<fmt:param/>
</fmt:message

【语法3】:

1
2
3
4
5
<fmt:message key=”keyName”[bundle=”bundle”][scope=”page|request|session|application”]\> 
key
<fmt:param/>
…
</fmt:message>

<fmt:message>标签属性说明:

参数名 说明 EL 类型 必须 默认值
key 指定键值的名称(索引) String
bundle 指定消息文本的来源 LocalizationContext
var 指定存储键值的变量名 String
scope 指定var的作用域 String page

提示:建议此处的bundle使用EL表达式,因为属性bundle的类型为LocalizationContext,而不是一个String类型的URL。

【示例代码】:实现从指定的资源文件中读取对应key的值。

首先编写一个资源文件内容下

1
2
name=olive
password=01234

使用标签从资源文件中读取相应的值。

1
2
3
4
5
6
7
  <fmt:bundle basename="message">
  <c:out value="从message资源文件中得到的key为name的值为:"></c:out>
  <fmt:message key="name" ></fmt:message>
  </fmt:bundle>
  <hr>
  <fmt:setBundle basename="message" var="m"/>
  <fmt:message key="password" bundle="${m}"></fmt:message

${m}

【代码解析】:

(1)使用<fmt:bundle>标签指定从message.properties文件中读取值。

(2)使用<fmt:message>标签读取资源文件中key为name的值。<fmt:message>标签放在<fmt:bundle>标签体内使用。

(3)使用<fmt:setBundle>标签在page范围绑定一个配置文件,以m为参数名存储。

(4)使用<fmt:message>标签得到key为password的值,此处指定资源文件的方式为使用<fmt:message>标签的bundle属性来设定。

(5)输出参数m的值,加深对bundle的理解。

<fmt:bundle>标签中有一个prefix属性,该标签用来指明前缀。例如配置文件内容如下:

1
2
org.person.name=olive
org.personpassword=01234

如果不使用prefix标签,在取值是要指明前缀。例如:

1
2
3
4
<fmt:bundle basename=”message”>
<fmt:message key=”org.person.name”></fmt:message>
<fmt:message key=”org.person.password”></fmt:message>
</fmt:bundle

使用prefix属性可以简化取值时的代码。

1
2
3
4
<fmt:bundle basename=”message” prefix=”org.person”>
<fmt:message key=”name”></fmt:message>
<fmt:message key=”password”></fmt:message>
</fmt:bundle>

4.<fmt:param>标签

该标签主要用于当<fmt:message>中资源文件中获得键值时,动态的为资源文件中的变量赋值。

【语法1】:

1
<fmt:param value=”value”/>

【语法2】:

1
2
3
<fmt:param >
…标签主体
</fmt:param>

【示例代码】:

(1)创建资源文件。在message.properties文件中增加一个key和value。

1
2
news={0} welcome to out website!
<br>today is :{1,date}

表达的含义是键news对应的是一个字符串,字符串中还有动态变量{0}表示第一个动态变量,{1,date}表示第二个动态变量并且该变量是一个日期类型的对象。

(2)通过标签从资源文件中取出键值,并给动态变量赋值显示在页面。

1
2
3
4
5
6
  <fmt:bundle basename="message">
  <fmt:message key="news">
  <fmt:param value="olive" />
  <fmt:param value="${date}"/>
  </fmt:message>
  </fmt:bundle>

【代码解析】:

(1)使用<fmt:bundle>标签把资源文件绑定在标签体内。

(2)在<fmt:bundle>标签体内使用<fmt:message>得到键值。

(3)使用<fmt:param>为资源文件中的动态变量赋值。

9.3.3 国际化

国际化这个分类中共包含两个标签:用于设定语言地区<fmt:setLocale/>和用于设定请求的字符编码的<fmt:requestEncoding>标签。

1.<fmt:setLocale/>标签

<fmt:setLocale>标签用来设定用户语言区域。

【语法】:

1
<fmt:setLocale value=”locale”[variant=”variant”][scope=”page|request|session|application”]>

fmt:setLocale标签属性说明:

参数名 说明 EL 类型 必须 默认值
value 指定区域代码 Stringjava.util.Locale
variant 操作系统的类型 String
scope 设定时区的作用范围 String page

value属性用来指定使用的语言代码,可以从浏览器的【工具】—【Internet选项】—【语言】—【添加】中查看浏览器支持的语言种类及语言代码。例如:中文(zh_cn)、台湾(zh_tw)、香港(zh_mo)等。

【示例代码】:实现了设定不同的区域代码,根据不同的区域代码浏览将显示不同格式的日期。

1
2
3
4
5
6
7
8
  <fmt:setLocale value="en_us" />
  <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full"/>
  <hr>
  <fmt:setLocale value="zh_cn" />
  <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full"/>
  <hr>
  <fmt:setLocale value="zh_TW"/>
  <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full"/>

【代码解析】:

(1)浏览器默认跟您使用的操作系统的语言相同,因此默认值zh_cn。使用fmt:setLocale/标签设置使用的语言为en_us(英语)。使用fmt:formateDate格式化输出的时间字符串,该标签会根据不同的语言输出不同的日期格式。

(2)使用的语言修改为zh_cn,再次用格式化输出。

(3)使用语言修改为zh_TW,输出格式化后的时间。

2.<fmt:requestEncoding>标签

该标签用于设定请求的编码格式。功能同servletRequest.setCharacterEncoding()方法相同。

【语法】:

1
<fmt:requestEncoding [value=”charEncoding”]/>

【参数说明】:

value属性用来指定使用的编码集例如:gbk、gb2312等。当没有给出value的值时将会自动搜索取寻找合适的编码方式,因此能够很好的解决中文乱码问题。

JSP 标准标签库(JSTL)

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

根据JSTL标签所提供的功能,可以将其分为5个类别。

  • 核心标签
  • 格式化标签
  • SQL 标签
  • XML 标签
  • JSTL 函数

JSTL 库安装

Apache Tomcat安装JSTL 库步骤如下:

从Apache的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip)。

下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jarjstl.jar 文件拷贝到 /WEB-INF/lib/ 下。

将 tld 下的需要引入的 tld 文件复制到 WEB-INF 目录下。

接下来我们在 web.xml 文件中添加以下配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <jsp-config>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri>
    <taglib-location>/WEB-INF/fmt.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/fmt-rt</taglib-uri>
    <taglib-location>/WEB-INF/fmt-rt.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
    <taglib-location>/WEB-INF/c.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/core-rt</taglib-uri>
    <taglib-location>/WEB-INF/c-rt.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/sql</taglib-uri>
    <taglib-location>/WEB-INF/sql.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/sql-rt</taglib-uri>
    <taglib-location>/WEB-INF/sql-rt.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/x</taglib-uri>
    <taglib-location>/WEB-INF/x.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/x-rt</taglib-uri>
    <taglib-location>/WEB-INF/x-rt.tld</taglib-location>
    </taglib>
    </jsp-config>
</web-app>

使用任何库,你必须在每个 JSP 文件中的头部包含 标签。


核心标签

核心标签是最常用的 JSTL标签。引用核心标签库的语法如下:

1
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
标签 描述
用于在JSP中显示数据,就像<%= … >
用于保存数据
用于删除数据
用来处理产生错误的异常状况,并且将错误信息储存起来
与我们在一般程序中用的if一样
本身只当做<c:when>和<c:otherwise>的父标签
<c:choose>的子标签,用来判断条件是否成立
<c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
检索一个绝对或相对 URL,然后将其内容暴露给页面
基础迭代标签,接受多种集合类型
根据指定的分隔符来分隔内容并迭代输出
用来给包含或重定向的页面传递参数
重定向至一个新的URL.
使用可选的查询参数来创造一个URL

格式化标签

JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:

1
2
<%@ taglib prefix="fmt" 
           uri="http://java.sun.com/jsp/jstl/fmt" %>
标签 描述
使用指定的格式或精度格式化数字
解析一个代表着数字,货币或百分比的字符串
使用指定的风格或模式格式化日期和时间
解析一个代表着日期或时间的字符串
绑定资源
指定地区
绑定资源
指定时区
指定时区
显示资源配置文件信息
设置request的字符编码

SQL标签

JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签。引用SQL标签库的语法如下:

1
2
<%@ taglib prefix="sql" 
           uri="http://java.sun.com/jsp/jstl/sql" %>
标签 描述
指定数据源
运行SQL查询语句
运行SQL更新语句
将SQL语句中的参数设为指定值
将SQL语句中的日期参数设为指定的java.util.Date 对象值
在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行

XML 标签

JSTL XML标签库提供了创建和操作XML文档的标签。引用XML标签库的语法如下:

1
2
<%@ taglib prefix="x" 
           uri="http://java.sun.com/jsp/jstl/xml" %>

在使用xml标签前,你必须将XML 和 XPath 的相关包拷贝至你的<Tomcat 安装目录>\lib下:

标签 描述
与<%= … >,类似,不过只用于XPath表达式
解析 XML 数据
设置XPath表达式
判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体
迭代XML文档中的节点
<x:when>和<x:otherwise>的父标签
<x:choose>的子标签,用来进行条件判断
<x:choose>的子标签,当<x:when>判断为false时被执行
将XSL转换应用在XML文档中
与<x:transform>共同使用,用于设置XSL样式表

JSTL函数

JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:

1
2
<%@ taglib prefix="fn" 
           uri="http://java.sun.com/jsp/jstl/functions" %>
函数 描述
fn:contains() 测试输入的字符串是否包含指定的子串
fn:containsIgnoreCase() 测试输入的字符串是否包含指定的子串,大小写不敏感
fn:endsWith() 测试输入的字符串是否以指定的后缀结尾
fn:escapeXml() 跳过可以作为XML标记的字符
fn:indexOf() 返回指定字符串在输入字符串中出现的位置
fn:join() 将数组中的元素合成一个字符串然后输出
fn:length() 返回字符串长度
fn:replace() 将输入字符串中指定的位置替换为指定的字符串然后返回
fn:split() 将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回
fn:startsWith() 测试输入字符串是否以指定的前缀开始
fn:substring() 返回字符串的子集
fn:substringAfter() 返回字符串在指定子串之后的子集
fn:substringBefore() 返回字符串在指定子串之前的子集
fn:toLowerCase() 将字符串中的字符转为小写
fn:toUpperCase() 将字符串中的字符转为大写
fn:trim() 移除首尾的空白符

JSTL 1.1 与 JSTL 1.2 之间的区别?如何下载 JSTL 1.2?

JSTL 1.2 中不要求 standard.jar 包。

您可以在 Maven 中央仓库中找到它们。

http://repo2.maven.org/maven2/javax/servlet/jstl/

http://repo2.maven.org/maven2/taglibs/standard/

由于JSTL 1.1已经过时,Apache已将其置于存档中。选择jakarta-taglibs-standard-current.zip文件。但是,如果您正在运行Servlet 2.5兼容容器并且web.xml声明为至少Servlet 2.5,那么您应该能够使用新的JSTL 1.2。需要注意的是JSTL 1.2并没有要求standard.jar