日期:2014-05-16  浏览次数:20436 次

JSTL标签库(应用)
JSP 标准标记库(JSP Standard Tag Library,JSTL)是一个实现 Web 应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML 操作以及数据库访问。
JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。但是在即将推出的JSP 2.0中是作为标准支持的。
JSTL目前的最新版本为1.02,最终发布版为1.0。JSTL包含两个部分:标签库和EL(Expression Language表达式语言)语言。标签库目前支持四种标签:
标签 	URI 	前缀 	示例
Core 	http://java.sun.com/jstl/core 	c 	<c:tagname ...>
XML processing 	http://java.sun.com/jstl/xml 	x 	<x:tagname ...>
I18N capable formatting 	http://java.sun.com/jstl/fmt 	fmt 	<fmt:tagname ...>
Database access (SQL) 	http://java.sun.com/jstl/sql 	sql 	<sql:tagname ...>

Core支持JSP中的一些基本的操作;
XML processing支持XML文档的处理;
I18N capable formatting支持对JSP页面的国际化;
Database access (SQL)支持JSP对数据库的操作。

 

版本

  要注意1.0.x和1.1.x两个版本,目前最新版分别为1.0.6和1.1.2

  1.1版比1.0版多了fn标签库(常用的字符串操作在里面,特别是length、substring、等用于显示的函数)

  各个版本都可以在apache网站下载得到

使用中注意的问题

  在仅支持JSP1.2规范的容器中,只能使用jstl 1.0版,所以fn就不能用了,很不爽。${1 + 2}必面都要写在<c:out value='${1 + 2}' />里。在支持JSP2.0规范的容器中,可以直接使用el表达式。

一些BUG

  在websphere 6.0(6.0.2.13版以前)中,有fn:length函数的BUG。只有打补丁了。

        在websphere 中,如<c:out value='${var == 0 ? "非" : "是" }'  />这样的句子会出问题,tomcat下刚运行很好。应该是:jstl只是一个规范,各个web容器对其实现不同的原因吧。

 

 
一 JSTL使用配置总结
1.web.xml版本为2.3版本的配置

引用文档:http://blog.csdn.net/tiancaoyan/archive/2009/06/10/4256637.aspx

使用环境: WebLogic92 + JDK1.5,web.xml版本为2.3, 文件是如下表示:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

使用步骤:

l  拷贝jstl.jar,standard.jar文件到Web-INF/lib目录下

l  在引用JSP页面加上: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

l  如web.xml版本为2.3,还要在加上: <%@ page isELIgnored="false"%>
2 web.xml版本为2.4的配置

<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">   

l  拷贝jstl.jar,standard.jar文件到Web-INF/lib目录下

l  在引用JSP页面加上: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3 web.xml版本为2.5的配置

在J2EE5.0中已经将JSTL纳入标准规范,将jstl.jar,standard.jar二个jar文件合并为jstl1.2.jar.

<web-app version="2.5"

    xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

l  在引用JSP页面加上: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

以上的web.xml各个版本在Tomcat6.0.24下也能正常显示.
二 JSTL使用示例

JSTL获取值范围.

引用文档:http://blog.csdn.net/tiancaoyan/archive/2009/06/10/4256637.aspx

一个EL表达式包含变量和操作符。任何存储在某个JSP作用范围(如:page、 request、session、application)的bean能被作为一个EL变量来使用。另外,EL支持以下预定义的变量:

 

变量名称

 
	

说明

pageScope
	

一个包含所有page scope范围的变量集合 (a java.util.Map)

 

requestScope

 
	

一个包含所有request scope范围的变量集合 (a java.util.Map)

 

sessionScope

 
	

一个包含所有session scope范围的变量集合 (a java.util.Map)

 

applicationScope

 
	

一个包含所有application scope范围的变量集合 (a java.util.Map)

param

 
	

一个包含所有请求参数的集合 (a java.util.Map),通过每个参数对应一个String值的方式赋值

 

paramValues

 
	

一个包含所有请求参数的集合 (a java.util.Map),通过每个参数对应一个String数组的方式赋值

 

header

 
	

一个包含所有请求的头信息的集合, (a java.util.Map) ,通过每个头信息对应一个String值的方式赋值

 

headerValues

 
	

一个包含所有请求的头信息的集合 (a java.util.Map) ,通过每个头信息的值都保存在一个String数组的方式赋值

 

cookie

 
	

一个包含所有请求的 cookie集合 (a java.util.Map), 通过每一个cookie(javax.servlet.http.Cookie)对应一个cookie值的方式赋值

 

initParam

 
	

一个包含所有应用程序初始化参数的集合(a java.util.Map) ,通过每个参数分别对应一个String值的方式赋值

 

pageContext

 
	

一个javax.servlet.jsp.PageContext类的实例, 用来提供访问不同的请求数据

 

操作符描述了你对变量所期望的操作。如果你之前曾经使用过任何编程语言的话,在EL表达式中所使用的操作符对你来说可能看起来很熟悉。因为它们和那些在大多数语言中所支持的操作符一样。

.

访问一个bean属性或者 Map entry

[]

访问一个数组或者链表元素

()

对子表达式分组,用来改变赋值顺序

? :

条件语句,比如: 条件 ? ifTrue : ifFalse.如果条件为真,表达式值为前者,反之为后者

+

数学运算符,加操作

-

数学运算符,减操作或者对一个值取反

*

数学运算符,乘操作

 

/ or div

数学运算符,除操作

% or mod

数学运算符,模操作(取余)

== or e