JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。在JSP 2.0中也是作为标准支持的。
JSTL 1.0 发布于 2002 年 6 月,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。core 标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL 的标记。顾名思义,format 标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行 JSP 页面的国际化。xml 库包含一些标记,这些标记用来操作通过 XML 表示的数据,而 sql 库定义了用来查询关系数据库的操作。
如果要使用JSTL,则必须将jstl.jar和 standard.jar文件放到classpath中,如果你还需要使用XML processing及Database access (SQL)标签,还要将相关JAR文件放到classpath中,这些JAR文件全部存在于下载回来的zip文件中。
优点1)实现了JSP页面的代码复用。基于标签库原理,重复率较高的代码块支持复用,提高效率。
2)书写JSP页面时可读性更强。长得像XML,方便前端查看和参与开发。
3)在应用程序服务器之间提供了一致的接口,最大程度地提高了WEB应用在各应用服务器之间的移植。
4)简化了JSP和WEB应用程序的开发。
JSTL标签分类根据JSTL标签所提供的功能,可以将其分为5个类别:
1)核心标签(最常用、最重要,也是最基本的标签)
2)格式化标签
3)SQL标签
4)XML标签
5)JSTL函数(很常用)
要使用JSTL库,要在每一个JSP的顶部,使用该库必须包括一个指令。
(1)核心标签核心组的标签是最常用的JSTL标签。以下是在JSP的语法包含JSTL核心库:
有以下核心JSTL标签:
使用JSTL格式标签来格式化和显示文本,日期,时间和数字的,国际化的网站。以下是在您的JSP的语法,包括
格式化库:
以下是格式化JSTL标签列表:
JSTL的SQL标签库标签可以交互关系型数据库(如Oracle,MySQL或Microsoft SQL Server的关系数据库管理系
统)。以下是在您的JSP语法包括JSTL SQL库:
以下是SQL JSTL标签的列表:
JSTL XML标记提供了一种创建和操作XML文档的JSP为中心的方式。以下是在您的JSP的语法包括JSTL XML库。
JSTL XML标记库具有自定义标签与XML数据交互。这包括XML解析,转换XML数据,流控制,基于XPath表达式。
在继续之前的例子中,将需要复制下面的两个XML和XPath相关的库到 的\lib目录:
XercesImpl.jar: 下载地址 http://www.apache.org/dist/xerces/j/
xalan.jar: 下载地址 http://xml.apache.org/xalan-j/index.html
以下是XML JSTL标签列表:
JSTL包括一些标准功能,其中大部分是常见的字符串操作函数。以下是在JSP的语法包函JSTL函数库:
以下是JSTL函数列表:
标签是显示表达式的结果,类似的方式效果,与其不同的是标签可以使用简单的"."操
作符来访问属性。例如,要访问customer.address.street,使用的标签是:
标签可自动转义XML标签,以便他们都不会计算为实际的标签。
标签具有以下属性:
标签的用法:
1)输出常量:可在属性value中直接赋值
2)输出变量:变量不存在时可配合defalut属性输出默认值,还可以通过属性escapeXml控制转义字符的输出方
式。
实例:
结果:
标签是JSTL的setProperty动作的友好版本。标签是有用的,因为它的表达式求值,并使用结果的
JavaBean或Java.util.Map对象设置一个值。
标签具有以下属性:
如果指定目标,属性也必须指定。
标签的用法:
1)存值到scope中:可将值以变量形式存放在指定的范围中(2种方式)
2)存值到JavaBean的属性中
实例:
实例类Person的代码:
package com.entity;
/**
* 实体类Person
* @author Administrator
* @date 2016年7月27日
*/
public class Person {
private String name;
private int age;
private String hobby;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
}
NewFile.jsp页面:
JSTL使用
JSTL标签的使用
football
22
结果:
标签是删除变量,无论是从指定的范围内或范围内的变量(如果没有指定范围)。这个动作通常是不
特别有帮助,但它可以帮助确保一个JSP范围内的资源,它负责清理。
标签具有以下属性:
标签的用法:
移除掉某个变量,var属性是必选的;scope属性是可选的。
实例:
结果:
标签捕获任何异常信息,发生在它的身上,有选择地公开。简单地用于错误处理,更优雅地处理这
个问题。
标签具有以下属性:
标签的用法:
可以包含那些容易出错的JSTL标签(逻辑)。
实例:
结果:
标签计算表达式,只有当表达式的值为true,则显示其主体内容。
标签具有以下属性:
标签的用法:
同程序中的if作用相同,用来实现分支条件控制。
text属性用于存放判断的条件,一般使用EL表达式来编写;
var属性是指定名称用来存放判断的结果类型为true或false;
scope属性是用来存放var属性存放的范围。
实例:
根据用户输入的成绩进行等级判断
结果:
这个例子没有做完,使用标签实现比较繁琐,我们后面可以使用标签以及标签来实
现。
标签、标签和标签就像Java switch语句,它可以让你选择一些替代方案品。正如switch语句case语句,标
签有的标签。一个switch语句中有default子句来指定一个默认的行动同样的方式有
作为默认子句。
通常这三个标签被放在一起使用。标签嵌套在标签和标签的外面作为他们
的父标签来使用;其中标签和标签也可以一起组合使用。
标签没有任何属性。标记有一个属性,下面列出了。标签没有任何属性。
标记具有以下属性:
语法结构一:同时使用标签、标签和标签
结构:
//业务逻辑
//业务逻辑
...
//业务逻辑
实例代码:
JSTL使用
JSTL标签的使用
结果:
语法结构二:只使用标签和标签
结构:
表达式
实例:
在上面的代码中加上以下代码:
结果:
存在这些标签嵌入Java的一个很好的选择,让while或do-while循环通过脚本。标签是常用的标
签,因为它遍历对象的集合。
标记有以下属性:
标签的用法:
根据循环条件遍历集合(Collection)中的元素。
var属性是设定变量名用于存储从集合中取出元素(必须无默认值);
items属性是指定要遍历的几个(必须无默认值);
begin属性和end属性是用于指定遍历的起始位置和终止位置(有默认);
step属性指定循环的步长(有默认);
varStatus属性通过index、count、first和last几个状态值,描述begin和end子集中的元素的状态。
常用用法一:全部遍历
操作var变量表示的元素
实例代码:
JSTL使用
JSTL标签的使用
结果:
常用用法二:部分遍历
操作var变量表示的元素
上面实例加上以下代码:
结果:
常用用法三:部分遍历并且指定步长
操作var变量表示的元素
上面实例加上以下代码:
结果:
常用用法四:部分遍历时输出元素的状态
操作var变量表示的元素
上面实例加上以下代码:
结果:
标签是用来打破的字符串令牌和遍历每个标记。标签有类似的属性,
除了一个额外的属性delims指定要使用的字符作为分隔符。
标签的用法:
用于浏览字符串,并根据指定的字符将字符串截取。
items属性用于指定迭代的字符串;
delims属性指定使用的分隔符;
var属性用来指定存放遍历到的成员;
begin属性指定遍历的开始位置(int型从取值0开始);
end属性是指定遍历的结束位置(int型,默认集合中最后一个元素);
step属性指定循环的步长(大于0的整型);
varStatus属性通过index、count、first和last几个状态值,描述begin和end子集中的元素的状态。
实例:
结果:
对于其他的属性可以自行进行设置与验证。
标签标签提供动作标签的所有的功能动作,但也可以包含绝对URL。例如,允许使用导入
标签包含的内容从一个不同的Web站点或FTP服务器。
同标签的区别:只能包含同一个Web应用中的文件,而标签可以包含其他Web应用中
的文件,甚至是网络上的资源。
标签具有以下属性:
标签的用法:
可以把其他静态或动态文件包含到本JSP页面。
url属性指的是被导入资源的URL路径;
context属性指的是相同服务器下其他Web工程,必须以"/"开头;
var属性指的是以String类型存入被包含文件的内容;
scope属性指的是var变量的JSP范围;
charEncoding属性指的是被导入文件的编码格式 ;
varReade属性指的是以Reader类型存储被包含文件内容;
context属性引入的内容是webapps下的其他的Web project。
实例代码:
JSTL使用
JSTL标签的使用
结果:
标签将浏览器重定向到一个备用URL提供自动URL重写,它支持上下文相关的URL和支持
标签。
标签具有以下属性:
标签允许适当的URL请求参数到指定的URL和任何必要的URL编码。在一个标签的name
属性表示参数的名称,value属性表示的参数值。
标签具有以下属性:
标签的用法:
该标签用来实现请求的重定向,同事可以在url中加入指定的参数;
url属性用于指定重定向页面的地址,可以是一个String类型的绝对路径或相对地址;
context属性用于导入其他Web应用中的页面。
实例:
test.jsp页面代码:
结果:
标签格式化成一个字符串格式的URL,并将其存储到变量中。这个标签会在必要时自动执行URL重写。
var属性指定的变量将包含格式化的URL。JSTL url标签只是response.encodeURL()方法的调用一个替代方法。URL
标记提供的唯一的真正的优势是正确的URL编码,包括子标签指定的任何参数。
标记具有以下属性:
标签的用法:
该标签用于动态生成一个String类型的URL,可以同标签共同使用,也可以使用HTML中的标签
实现超链接。
var属性是将url路径存储在的变量中;
value属性表示url路径值;
scope属性是var变量的范围。
实例:
结果:
需要在页面添加:
先来介绍几个简单常用的JSTL函数:
1)使用fn:contains()函数判断输入的字符串是否包含指定的子串。
使用fn:contains()函数的语法如下:
boolean contains(java.lang.String, java.lang.String)
2)fn:containsIgnoreCase()函数判断输入的字符串是否包含指定的子串,搜索时忽略大小写。
使用fn:containsIgnoreCase()函数的语法如下:
boolean containsIgnoreCase(java.lang.String, java.lang.String)
3)fn:endsWith()函数判断输入的字符串是否与指定的后缀结束。
使用fn:endsWith()函数的语法如下所示:
boolean endsWith(java.lang.String, java.lang.String)
4)fn:startsWith() 函数判断输入的字符串是否为指定的子串开始。
使用fn:startsWith() 函数有以下语法:
boolean startsWith(java.lang.String, java.lang.String)
5)fn:indexOf()函数返回在字符串中指定的子串的索引。
使用fn:indexOf() 函数的语法如下:
int indexOf(java.lang.String, java.lang.String)
6)fn:escapeXml()函数转义字符,可以解释为XML标记。
使用fn:escapeXml() 函数的语法如下:
java.lang.String escapeXml(java.lang.String))
实例代码:
JSTL使用
JSTL函数的使用
结果:
其他的JSTL函数: