`

JSTL标准标签库

阅读更多

简介

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对数据库的操作。

安装JSTL

要使用JSTL,你必须安装有一个JSP1.2(或者更高版本)的容器。最普通的JSP容器是Apache Tomcat。你能够从http://jakarta.apache.org/tomcat/ 这里下载到。独立的Tomcat允许你使用常规的JSP scriptlet代码。要使用JSTL,你必须在Tomcat中安装JSTL。JSTL的主要URL是 http://java.sun.com/products/jsp/jstl/ 。要使用JSTL,必须解压这个文件,然后将它安装到Tomcat的正确位置。

要在Tomcat中安装JSTL,有下面三个步骤:

  1. 拷贝JSTL JAR文件到Tomcat的lib目录中.
  2. 拷贝JSTL TLD文件到Tomcat的web-inf目录中
  3. 修改web.xml文件包含这些TLD文件。


  4. 如果你使用的是Windows, 那么lib目录最可能的位置是C:\Program Files\Apache Tomcat 4.0\webapps\ROOT\WEB-INF\lib。你应该拷贝这些JAR包到你的Tomcat JAR目录。


    你检查JSTL发布文件时,你应该会注意到有8个文件是以TLD扩展名结尾的。所有这8个文件都应该复制到你的web-inf目录中。


    最后,你必须修改你的web.xml,添加8个标签库的表项(entry)。需要添加的表项如下所示:
<taglib>
    <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
    <taglib-location>/WEB-INF/fmt.tld</taglib-location>
</taglib>

<taglib>
    <taglib-uri>http://java.sun.com/jstl/fmt-rt</taglib-uri>
    <taglib-location>/WEB-INF/fmt-rt.tld</taglib-location>
</taglib>

<taglib>
    <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
    <taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>

<taglib>
    <taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri>
    <taglib-location>/WEB-INF/c-rt.tld</taglib-location>
</taglib>

<taglib>
    <taglib-uri>http://java.sun.com/jstl/sql</taglib-uri>
    <taglib-location>/WEB-INF/sql.tld</taglib-location>
</taglib>

<taglib>
    <taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri>
    <taglib-location>/WEB-INF/sql-rt.tld</taglib-location>
</taglib>

<taglib>
    <taglib-uri>http://java.sun.com/jstl/x</taglib-uri>
    <taglib-location>/WEB-INF/x.tld</taglib-location>
</taglib>

<taglib>
    <taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri>
    <taglib-location>/WEB-INF/x-rt.tld</taglib-location>
</taglib>
 

完成上面这三步后,你现在可以准备测试你的JSTL安装了。可以通过创建一个包含JSTL的JSP页面来验证。一个最简单的范例程序就是上 面的那个计数器程序。你应该将它放置在你的Webroot目录中(C:\Program Files\Apache Tomcat 5.0\webapps\ROOT)。一旦Tomcat启动后,你应该能够通过浏览 http://127.0.0.1:8080/count.jsp来查看这个页面。

如果你没有正确安装JSTL,那么可能不会出现错误信息。如果JSTL不能解释你的标签含义,那么它在Web浏览器上会直接跳过。然后Web浏览器将解释这些未知的HTML标签。多数浏览器仅仅只是忽略这些未知的HTML标签。

JSTL标签库

JSTL通常被认为是一种单标签库。但JSTL实际上有4个标签库。这些标签库被概括为如下:

  • 核心标签库 —包含一些Web应用的必要的标签。核心标签库的实例包括循环,表达式赋值和基本输入输出。.

  • 格式化/国际化标签库 —包括被用来解析数据的标签库。这种标签会解析数据,比如日期,不同的场所区域等。

  • 数据库标签库 —包含被用来访问SQL数据库的标签。这些标签通常仅仅只创建原形(prototype)程序。这个是因为大多数程序不会直接从JSP页面中来处理数据库访问。数据库访问应该被嵌入到能够被JSP页面所访问的EJB中。

  • XML标签库 —包含被用来访问XML元素的标签。因为XML广泛使用于Web开发,XML的处理是JSTL的一个重要的特征。 

在本文中,我们将仅仅只对核心标签做一个简单介绍。我们将考察一个简单的范例,来说明如何处理用户在表单中输入的数据。在我们开始检查程序 之前,我们必须先看看JSTL是如何处理表达式的,JSTL的表达式处理是通过使用EL表达式语言来完成的,仅仅只能在JSP2.0被使用。下一节,我们 会考察EL表达式语言。

Core标签库

1、 通用标签

<c:out>
<c:out>标签用于在JSP中显示数据,它有如下属性

属 性 描 述 是否必须 缺省值
value 输出的信息,可以是EL表达式或常量
default value为空时显示信息
escapeXml 为true则避开特殊的xml字符集 true



例子:
您的用户名是: <c:out value=”${user.username}” default=”guest”/>

显示用户的用户名,如为空则显示guest
<c:out value="${sessionScope.username}"/>

指定从session中获取username的值显示;
<c:out value="${username}" />

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

<c:set>
<c:set>标签用于保存数据,它有如下属性
属 性 描 述 是否必须 缺省值
value 要保存的信息,可以是EL表达式或常量  
target 需要修改属性的变量名,一般为javabean的实例
property 需要修改的javabean属性
var 需要保存信息的变量
scope 保存信息的变量的范围 page

如果指定了target属性, 那么property属性也必须指定。
例子:
<c:set value="${test.testinfo}" var="test2" scope=”session” />

将test.testinfo的值保存到session的test2中,其中test是一个javabean的实例,testinfo是test对象的属性。
<c:set target="${cust.address}" property="city" value="${city}"/>

将对象cust.address的city属性值保存到变量city中

<c:remove>
<c:remove>标签用于删除数据,它有如下属性
属 性 描 述 是否必须 缺省值
var 要删除的变量
scope 被删除变量的范围 所有范围,包括page、request、session、application等

例子:
<c:remove var="test2" scope="session"/>

从session中删除test2变量。

2、 流控制标签

<c:if>

<c:if>标签有如下属性
属 性 描 述 是否必须 缺省值
test 需要评价的条件,相当于if (...){}语句中的条件
var 要求保存条件结果的变量名
scope 保存条件结果的变量范围 page


<c:choose>
这个标签不接受任何属性

<c:when>
<c:when>标签有以下属性
属 性 描 述 是否必须 缺省值
test 需要评价的条件


<c:otherwise>
这个标签同样不接受任何属性

例子:
<c:if test="${user.wealthy}">
user.wealthy is true.
</c:if>

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

<c:choose>
<c:when test="${user.generous}">
user.generous is true.
</c:when>
<c:when test="${user.stingy}">
user.stingy is true.
</c:when>
<c:otherwise>
user.generous and user.stingy are false.
</c:otherwise>
</c:choose>

只有当条件user.generous返回值是true时,才显示user.generous is true.
只有当条件user.stingy返回值是true时,才显示user.stingy is true.
其它所有的情况(即user.generous和user.stingy的值都不为true)全部显示user.generous and user.stingy are false.

由于JSTL没有形如if (){…} else {…}的条件语句,所以这种形式的语句只能用<c:choose>、<c:when>和<c:otherwise>标签共同来完成了。

3、 循环控制标签

<c:forEach>
<c:forEach>标签用于通用数据,它有以下属性
属 性 描 述 是否必须 缺省值
items 进行循环的项目
begin 开始条件 0
end 结束条件 集合中的最后一个项目
step 步长 1
var 代表当前项目的变量名
varStatus 显示循环状态的变量


例子:
<c:forEach items="${vectors}" var="vector">
<c:out value="${vector}"/>
</c:forEach>

相当于java语句
for (int i=0;i<vectors.size();i++) {
out.println(vectors.get(i));
}

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

<c:forEach begin="0" end="100" var="i" step="1">
count=<c:out value="${i}"/><br>
</c:forEach>

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

<c:forTokens>
<c:forTokens>标签有以下属性
属 性 描 述 是否必须 缺省值
items 进行循环的项目
delims 分割符
begin 开始条件 0
end 结束条件 集合中的最后一个项目
step 步长 1
var 代表当前项目的变量名
varStatus 显示循环状态的变量


例子

<c:forTokens items="a:b:c:d" delims=":" var="token">
<c:out value="${token}"/>
</c:forTokens>

这个标签的使用相当于java.util.StringTokenizer类。在这里将字符串a:b:c:d以:分开循环四次,token是循环到当前分割到的字符串。

4.导入文件和URL

JSTL核心标签库支持使用<c:import>来包含文件,使用<c:url>来打印和格式化URL,使用<c:redirect>来重定向URL。

<c:import>
<c:import>标签包含另外一个页面代码到当前页,它有以下属性
属 性 描 述 是否必须 缺省值
url 需要导入页面的url
context /后跟本地web应用程序的名字 当前应用程序
charEncoding 用于导入数据的字符集 ISO-8859-1
var 接受导入文本的变量名 page
scope 接受导入文本的变量的变量范围 1
varReader 用于接受导入文本的java.io.Reader变量名
varStatus 显示循环状态的变量


<c:url>
<c:url>标签输出一个url地址,它有以下属性
属 性 描 述 是否必须 缺省值
url url地址
context /后跟本地web应用程序的名字 当前应用程序
charEncoding 用于导入数据的字符集 ISO-8859-1
var 接受处理过的url变量名,该变量存储url 输出到页
scope 存储url的变量名的变量范围 page


例子:

<c:import url="http://www.url.com/edit.js" var="newsfeed"/>

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

<a href="<c:url url="/index.jsp"/>"/>

在当前页的当前位置输出<a href="http://www.yourname.com/index.jsp"/>,http://www.yourname.com是当前页的所在的位置。


<c:redirect>
<c:redirect>标签将请求重新定向到另外一个页面,它有以下属性
属 性 描 述 是否必须 缺省值
url url地址
context /后跟本地web应用程序的名字 当前应用程序

例子:

<c:redirect url="http://www.yourname.com/login.jsp"/>

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

<c:param>
<c:param>标签用来传递参数给一个重定向或包含页面,它有以下属性
属 性 描 述 是否必须 缺省值
name 在request参数中设置的变量名
value 在request参数中设置的变量值

例子:

<c:redirect url="login.jsp">
<c:param name="id" value="888"/>
</c:redirect>

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

EL表达式语言

JSP2.0的一个主要的组件就是这个新的叫做EL的表达式语言。EL被广泛用在JSTL中。然而,重要的是记住,EL是JSP的功能而不 是JSTL的。被用在JSP2.0中JSP scriptlet代码能够包含EL表达式。下面这行代码演示了JSP scriptlet代码中的EL:

<p>
  Your total, including shipping is ${total+shipping}
</p>
 

正如你看到的,total和shipping相加后会产生HTML并且在浏览器中显示它们的值。这些表达式也可以在JSTL标签中使用。 JSTL1.0的一个重要问题是,JSTL不能用在JSP1.2的版本上。因为JSP1.2不支持EL,所以有必要提供一些额外的JSTL标签来帮助EL 的使用。例如,如果你想使用JSTL来显示上面的表达式,你可以使用下面的代码。

<p>
  Your total, including shipping is <c:out var="${total+shipping"/>
</p>
 

值得注意的是,JSTL不需要JSP2.0来运行。通过提供一个能够显示EL表达式的标签,就可以达到这样的需求。

JSTL范例

我们将考察一个简单的使用JSTL的范例。在这个例子里,我们将考察Web应用中的一个常见过程。我们会看到如何提交(POST)一个表单,并处理POST的结果。程序代码如下:

 

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<html>
  <head>
    <title>If with Body</title>
  </head>

  <body>
    <c:if test="${pageContext.request.method=='POST'}">
      <c:if test="${param.guess=='Java'}">You guessed it!
      <br />

      <br />

      <br />
      </c:if>

      <c:if test="${param.guess!='Java'}">You are wrong
      <br />

      <br />

      <br />
      </c:if>
    </c:if>

    <form method="post">Guess what computer language
                        I am thinking of?
    <input type="text" name="guess" />

    <input type="submit" value="Try!" />

    <br/>
    </form>
  </body>
</html>
 

这个简单的Web页面显示一个表单,要求用户猜测程序所想的计算机语言。当然,计算机想的是“Java”。这个页面通过检查“是否已提交”来开始。这使得表单和处理表单的代码可以放在同一个页面中。是通过下面的JSTL if语句实现的。

<c:if test="${pageContext.request.method=='POST'}">
 

现在你看到了,<c:if>标签使用EL表达式来决定是否请求的方式是POST的。如果数据被post到页面,那么用户输入的 他们的猜想值就会存储在名为“guest”的参数中。这是因为“guest”是表单输入项的名字。我们现在必须检查是否这个参数等于“Java”。这个是 通过下面的<c:if>标签来完成:

<c:if test="${param.guess=='Java'}">
          You guessed it!
      </c:if>
 

正如你所看到的,如果表达式为true,<c:if>标签的标签体就被执行。在本文中,我们开始考察了JSTL如何被安装,以及它是如何运转的,也提供了一些JSTL小范例帮助大家理解。

JSTL的核心标签也包含循环,叠代器和变量处理。通过使用标签,你能在collections里进行iterate,访问用户的会话数据(session data),执行其他的核心任务等。除了核心标签库,XML,数据库和格式化标签库也提供了更多高级的用处。

分享到:
评论

相关推荐

    jstl标准标签库jar包.zip

    jstl标准标签库的三个jar包:jstl-1.2、jstl-api-1.2、jstl-impl-1.2。 jstl标准标签库的三个jar包:jstl-1.2、jstl-api-1.2、jstl-impl-1.2。 jstl标准标签库的三个jar包:jstl-1.2、jstl-api-1.2、jstl-impl-1.2...

    jstl标准标签库

    JSTL(JSP Standard Tag Library)是Java服务器页面(JSP)的一种标准标签库,旨在简化JSP页面中的编程,提高代码的可读性和可维护性。它提供了丰富的标签来处理常见的页面逻辑,比如输出、条件判断、循环等,避免了...

    JSTL标准标签库.pdf

    从JSP 1.1规范开始JSP就支持使用自定义标签,使用自定义标签大大降低了...许多WEB应用厂商都开发出了自己的一套标签库提供给用户使用,这导致出现了许多功能相同的标签,令网页制作者无所适从,不知道选择哪一家的好。

    CHM格式的JSTL标准标签库API

    CHM格式的JSTL标准标签库APICHM格式的JSTL标准标签库APICHM格式的JSTL标准标签库API

    JSTL标准标签库帮助文档和jar包

    "JSTL标准标签库帮助文档chm"是一个压缩包内的资源,它通常包含了关于JSTL库的详细说明、API参考、示例以及使用指南。CHM文件是一种Microsoft编写的帮助文件格式,便于用户快速查询和学习JSTL的各个标签及其用法。...

    JSTL标准标签库的应用

    ### JSTL标准标签库的应用 #### 一、JSTL简介 JSTL(JavaServer Pages Standard Tag Library)是一个开放源代码的JSP标签库,由Apache的Jakarta项目组进行维护。JSTL的设计目标是简化Web应用程序的开发过程,通过...

    JSTL标准标签库很详细的说明和使用指南

    ### JSTL标准标签库详解及使用指南 #### 一、引言 JSTL(JavaServer Pages Standard Tag Library,JavaServer 页面标准标签库)是一种用于简化JavaServer Pages (JSP) 页面开发的标准标签库。它由Apache Jakarta...

    jstl标准标签库.zip

    这个压缩包文件"jstl标准标签库.zip"包含了用于使用JSTL的必要组件,主要为`jstl-1.2`版本,特别是`standard`目录下的`jstl.jar`文件。 JSTL由以下几个核心部分组成: 1. **Core标签库**:这是JSTL中最基础的部分...

    JSP中的JSTL标准标签库

    **JSP中的JSTL标准标签库** JSP(JavaServer Pages)是Java平台上用于创建动态Web内容的技术。为了提高代码的可读性、可维护性和遵循MVC(Model-View-Controller)设计模式,JSP引入了JSTL(JavaServer Pages ...

    JSTL标准标签库学习(简单).pdf

    ### JSTL标准标签库详解 #### 一、简介 ##### 1、JSTL是什么? JSTL,全称JSP Standard Tag Library,即JSP标准标签库,是由Sun Microsystems(现已被Oracle收购)根据特定规范开发的一系列可重用的标签库,用于...

    JSTL 标准标签库

    **JSTL(JavaServer Pages Standard Tag Library)标准标签库**是Java Web开发中的一个重要工具,它提供了一系列预定义的HTML和XML标签,用于简化JavaServer Pages(JSP)的编写,提高代码的可读性和可维护性。JSTL...

    第14章 JSTL标准标签库

    第14章 JSTL标准标签库,jsp基础知识

    j2ee:servlet练习短信项目,包含过滤器的使用、EL表达式和JSTL标准标签库的使用

    标题 "j2ee:servlet练习短信项目,包含过滤器的使用、EL表达式和JSTL标准标签库的使用" 描述了一个基于J2EE平台的短信服务项目的实践,其中涵盖了多个关键的Java Web开发技术。这个项目不仅涉及到Servlet的编程,还...

    06JSTL标准标签库

    此外,JSTL还包含其他标签库,如fmt(格式化标签库)、sql(数据库操作标签库)和fn(函数标签库),它们提供了更多的功能,如日期和数字的格式化、SQL查询的执行以及字符串和集合的处理等。 总的来说,JSTL通过...

Global site tag (gtag.js) - Google Analytics