目录

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.jar 和 jstl.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。