JSTL(jsp标准标签库)介绍

 
前言
jsp 1.1规范开始,jsp就支持在jsp中使用自定义标签了,自定义标签的广泛使用造成了程序员重复定义,这样就促成了jstljavaserver pages standard tag library)的诞生。
因为工作中需要用到jstl,但网上却苦于找不到有关jstl的中文资料,所以就有了这篇文章。
jstl
简介
jstl
是一个不断完善的开放源代码的jsp标签库,是由apachejakarta小组来维护的。jstl只能运行在支持jsp1.2servlet2.3规范的容器上,如tomcat 4.x。但是在即将推出的jsp 2.0中是作为标准支持的。
jstl
目前的最新版本为1.02,最终发布版为1.0jstl包含两个部分:标签库和elexpression language表达式语言)语言。标签库目前支持四种标签:

标签

uri

前缀

示例

core

http://java.sun.com/jstl/core

c

xml processing

http://java.sun.com/jstl/xml

x

i18n capable formatting

http://java.sun.com/jstl/fmt

fmt

database access (sql)

http://java.sun.com/jstl/sql

sql

core支持jsp中的一些基本的操作;
xml processing
支持xml文档的处理;
i18n capable formatting
支持对jsp页面的国际化;
database access (sql)
支持jsp对数据库的操作。
由于本人水平有限,本文仅介绍core标签,如有兴趣,可一起探讨其它三种标签的使用与扩充。
el
语言介绍
el
语言是jstl输出(输入)一个java表达式的表示形式。
jstl中,el语言只能在属性值中使用。el语言只能通过建立表达式${exp1}来进行调用。在属性值中使用表达式有三种方式。
1
value属性包含一个表达式

在这种情况下,表达式值被计算出来并根据类型转换规则赋值给value属性。比如:中的${username}就是一个el,它相当于jsp语句<%=request.getattribute(“username”)%><%=session.getattribute(“username”)%>

2
value属性包含一个或多个属性,这些属性被文本分割或围绕


在这种情况下,表达式从左到右进行计算,并将结果转换为字符串型(根据类型转换规则),并将结果赋值给value属性
3
value属性仅仅包含文本

在这种情况下,字符串型属性value将根据类型转换规则转换为标签所希望的类型。
el
语言的操作符
取得某个对象或集合中的属性值
为了获得集合中的属性,el支持以下两种操作
1
使用.操作符来获得有名字的属性。例如表达式${user.username}表明对象userusername属性
2
使用[]操作符来获得有名字或按数字排列的属性。
表达式${user["username"]}和表达式${user. username }含义相同
表达式${row[0]} 表明row集合的第一个条目。
在这里user是一个类的对象,它的属性username必须符合标准javabean的规范,即必须为username属性定义相应的gettersetter方法。
empty
操作符(空值检查)
使用empty操作符来决定对象、集合或字符串变量是否为空或null。例如:

${empty param.username}
如果request的参数列表中的username值为null,则表达式的值为true el也可以直接使用比较操作符与null进行比较。如${param.firstname == null}
比较操作符

操作符

描述

==eq

相等检查

!=ne

不等检查

<lt

小于检查

>gt

大于检查

<=le

小于等于检查

>=ge

大于等于检查

数字运算符与逻辑运算符均与java语言相同,不再列表。
core
标签库
1
通用标签

标签用于在jsp中显示数据,它有如下属性

是否必须

缺省值

value

输出的信息,可以是el表达式或常量

default

value为空时显示信息

escapexml

true则避开特殊的xml字符集

true


例子:

您的用户名是:

显示用户的用户名,如为空则显示guest

指定从session中获取username的值显示;

显示username的值,默认是从request(page)中取,如果request中没有名为username的对象则从session中取,session中没有则从application(servletcontext)中取,如果没有取到任何值则不显示。

标签用于保存数据,它有如下属性

是否必须

缺省值

value

要保存的信息,可以是el表达式或常量

target

需要修改属性的变量名,一般为javabean的实例

property

需要修改的javabean属性

var

需要保存信息的变量

scope

保存信息的变量的范围

page


如果指定了target属性, 那么property属性也必须指定。
例子:

test.testinfo的值保存到sessiontest2中,其中test是一个javabean的实例,testinfotest对象的属性。

将对象cust.addresscity属性值保存到变量city

标签用于删除数据,它有如下属性

是否必须

缺省值

var

要删除的变量

scope

被删除变量的范围

所有范围,包括pagerequestsessionapplication

例子:

session中删除test2变量。
2
流控制标签

标签有如下属性

是否必须

缺省值

test

需要评价的条件,相当于if (...){}语句中的条件

var

要求保存条件结果的变量名

scope

保存条件结果的变量范围

page


这个标签不接受任何属性

标签有以下属性

是否必须

缺省值

test

需要评价的条件


这个标签同样不接受任何属性
例子:


user.wealthy is true.

如果user.wealthytrue,则显示user.wealthy is true.



user.generous
 
is true.


user.stingy is true.


user.generous and user.stingy are false.

只有当条件user.generous返回值是true时,才显示user.generous is true.
只有当条件user.stingy返回值是true时,才显示user.stingy 
is true.
其它所有的情况(即user.generoususer.stingy的值都不为true)全部显示
user.generous and user.stingy are false.
由于jstl没有形如if (){…} else {…}的条件语句,所以这种形式的语句只能用标签共同来完成了。

3 循环控制标签

标签用于通用数据,它有以下属性

是否必须

缺省值

items

进行循环的项目

begin

开始条件

0

end

结束条件

集合中的最后一个项目

step

步长

1

var

代表当前项目的变量名

varstatus

显示循环状态的变量

例子:



相当于java语句

for (int i=0;iout.println(vectors.get(i));
}

在这里vectors是一个java.util.vector对象,里面存放的是string数据,vector是当前循环条件下string对象。实际上这里的vectors可以是任何实现了java.util. collection接口的对象。

count=

输出:
count=0
...
count=100

标签有以下属性

是否必须

缺省值

items

进行循环的项目

delims

分割符

begin

开始条件

0

end

结束条件

集合中的最后一个项目

step

步长

1

var

代表当前项目的变量名

varstatus

显示循环状态的变量

例子


这个标签的使用相当于java.util.stringtokenizer类。在这里将字符串a:b:c:d以:分开循环四次,token是循环到当前分割到的字符串。
4.
导入文件和url
jstl
核心标签库支持使用来包含文件,使用来打印和格式化url,使用来重定向url

标签包含另外一个页面代码到当前页,它有以下属性

是否必须

缺省值

url

需要导入页面的url

context

/后跟本地web应用程序的名字

当前应用程序

charencoding

用于导入数据的字符集

iso-8859-1

var

接受导入文本的变量名

page

scope

接受导入文本的变量的变量范围

1

varreader

用于接受导入文本的java.io.reader变量名

varstatus

显示循环状态的变量


标签输出一个url地址,它有以下属性

是否必须

缺省值

url

url地址

context

/后跟本地web应用程序的名字

当前应用程序

charencoding

用于导入数据的字符集

iso-8859-1

var

接受处理过的url变量名,该变量存储url

输出到页

scope

存储url的变量名的变量范围

page

例子:

url http://www.url.com/edit.js包含到当前页的当前位置,并将url保存到newsfeed变量中

"/>

在当前页的当前位置输出http://www.yourname.com是当前页的所在的位置。

标签将请求重新定向到另外一个页面,它有以下属性

是否必须

缺省值

url

url地址

context

/后跟本地web应用程序的名字

当前应用程序


例子:

将请求重新定向到http://www.yourname.com/login.jsp页,相当于response.setredirect("http://www.yourname.com/login.jsp");

标签用来传递参数给一个重定向或包含页面,它有以下属性

是否必须

缺省值

name

request参数中设置的变量名

value

request参数中设置的变量值

例子:



将参数888id为名字传递到login.jsp页面,相当于login.jsp?id=888
jstl
的优点

1
在应用程序服务器之间提供了一致的接口,最大程序地提高了web应用在各应用服务器之间的移植。
2
简化了jspweb应用程序的开发。
3
以一种统一的方式减少了jsp中的scriptlet代码数量,可以达到没有任何scriptlet代码的程序。在我们公司的项目中是不允许有任何的scriptlet代码出现在jsp中。
4
允许jsp设计工具与web应用程序开发的进一步集成。相信不久就会有支持jstlide开发工具出现。

 

下面是JSTL中自带的方法列表以及其描述
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
函数名 函数说明 使用举例
fn:contains
判定字符串是否包含另外一个字符串
fn:containsIgnoreCase
判定字符串是否包含另外一个字符串(大小写无关)
fn:endsWith
判定字符串是否以另外字符串结束

fn:escapeXml
把一些字符转成XML表示,例如 <字符应该转为< ${fn:escapeXml(param:info)}
fn:indexOf
子字符串在母字符串中出现的位置
${fn:indexOf(name, "-")}
fn:join
将数组中的数据联合成一个新字符串,并使用指定字符格开
${fn:join(array, ";")}
fn:length
获取字符串的长度,或者数组的大小
${fn:length(shoppingCart.products)}
fn:replace
替换字符串中指定的字符
${fn:replace(text, "-", "•")}
fn:split
把字符串按照指定字符切分
${fn:split(customerNames, ";")}
fn:startsWith
判定字符串是否以某个子串开始

fn:substring
获取子串 ${fn:substring(zip, 6, -1)}
fn:substringAfter
获取从某个字符所在位置开始的子串

${fn:substringAfter(zip, "-")}
fn:substringBefore
获取从开始到某个字符所在位置的子串 ${fn:substringBefore(zip, "-")}
fn:toLowerCase
转为小写
${fn.toLowerCase(product.name)}
fn:toUpperCase
转为大写字符
${fn.UpperCase(product.name)}
fn:trim
去除字符串前后的空格 ${fn.trim(name)}

 

函数描述
fn:contains(string, substring)
假如参数string中包含参数substring,返回true
fn:containsIgnoreCase(string, substring)
假如参数string中包含参数substring(忽略大小写),返回true
fn:endsWith(string, suffix)
假如参数 string 以参数suffix结尾,返回true
fn:escapeXml(string)
将有非凡意义的XML (HTML)转换为对应的XML character entity code,并返回
fn:indexOf(string, substring)
返回参数substring在参数string中第一次出现的位置
fn:join(array, separator)
将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。
fn:length(item)
返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。假如是String类型,返回值是String中的字符数。
fn:replace(string, before, after)
返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果
fn:split(string, separator)
返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素
fn:startsWith(string, prefix)
假如参数string以参数prefix开头,返回true
fn:substring(string, begin, end)
返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符
fn:substringAfter(string, substring)
返回参数substring在参数string中后面的那一部分字符串
fn:substringBefore(string, substring)
返回参数substring在参数string中前面的那一部分字符串
fn:toLowerCase(string)
将参数string所有的字符变为小写,并将其返回
fn:toUpperCase(string)
将参数string所有的字符变为大写,并将其返回
fn:trim(string)
去除参数string 首尾的空格,并将其返回

 

你可能感兴趣的:(jsp,string,redirect,session,url,语言)