JSTL介绍—JSP编程新组件 允许用标签编程

JSTL介绍中是允许JSP程序员使用标签进行编程而不是Java代码。为了说明为什么这个是可取的,给出一个快速简单的小例子。我们就举个非常简单的例子从1数到10。我们用常规的基于scriptlet JSP网页和JSTL两种方式来制作这个网页。当这个数到10的例子是使用scriptlet JSP编制的,JSP网页会有如下显示:

< html> 
< head>


< title>Count to 10 in JSP scriptlet< /title>


< /head>


< body>


< %


for(int i=1;i< =10;i++)


{%>


< %=i%>< br/>


< %


}


%>


< /body>


< /html>

正如你从以上例子中所看到的,使用scriptlet代码产生的网页源代码包括了HTML标签和Java语句的混合。有很多原因说明为什么这种混合式编程风格不是最佳的。

混合scriptlet和基于标签的代码不是最佳选择的主要原因是可读性。这种可读性是针对人和计算机的。JSTL允许编程者看一个由整个HTML和HTML-like标签组成的程序。

JSP scriptlet代码的可读性不仅只适用于人类。Scriptlet和HTML代码的混合也很难被计算机读取。尤其是HTML制作工具例如某个Dreamweaver和Microsoft FrontPage。目前,大多数HTML制作工具将JSP scriptlet代码作为不可编辑的块区而分离开。HTML制作工具通常不直接修改JSP scriptlet 代码。

以下代码显示如何使用JSTL编写从1数到10的这个例子。正如你所看到的,这个代码列表更连贯,因为只使用了标签。是HTML和JSTL标签混合在一起产生的例子。

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


< head>


< title>Count to 10 Example (using JSTL)< /title>

< /head>


< body>


< c:forEach var="i" begin="1" end="10" step="1">

< c:out value="${i}" />


< br />


< /c:forEach>


< /body>


< /html>

当你检查以前的代码的时候,你可以看到JSP网页整个是由标签组成的。上述代码使用了HTML标签如< head> 和< br>。标签的使用不仅限于HTML标签。这个代码也使用了JSTL标签例如< c:forEach> 和 < c:out>。在本文中向你介绍一些JSTL的基础知识。

安装JSTL

为了使用JSTL,你必须安装JSP 1.2(或更高的版本)的容器。其中最常用的JSP容器是Apache Tomcat Web server。你可以从这里http://jakarta.apache.org/tomcat/获取一个Tomcat的副本。单独使用Tomcat可以让你使用常规的JSP scriptlet代码。为了使用JSTL, 你必须安装JSTL到Tomcat。JSTL可以从和Tomcat一样的来源获得。JSTL主要的URL是http://java.sun.com/products/jsp/jstl/。为了使用JSTL,你必须解压分配文件并把它们安装到Tomacat中的正确位置。

为了同时使用Tomcat,正确安装JSTL遵循以下三个步骤:

复制JSTL JAR文件到Tomcat的lib目录。

如果你使用Windows,你的lib目录的可能位置是C:\Program Files\Apache Tomcat 4.0\webapps\ROOT\WEB-INF\lib。JSTL发布时就有很多JAR文件包括其中。你需要复制每一个JAR文件到Tomcat JAR目录中。

复制JSTL TLD文件到Tomcat的web-inf目录web-inf目录的位置是C:\Program Files\Apache Tomcat 4.0\webapps\ROOT\WEB-INF。如果你研究JSTL分配文件,你应该注意到8个扩展名是TLD的文件。这8个文件要复制到你的web-inf目录中。

修改web.xml文件来包括TLD文件最后,你必须修改你的web.xml文件,并为这8个你添加的标签库添加入径。这个由在主< web-app>指令中添加< taglib>指令。

< 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网页来完成。最简单的例子就是以上所示的"count to ten"例子。你应该把你的JSP文件放到Webroot目录中(C:\Program Files\Apache Tomcat 4.0\webapps\ROOT)。一旦Tomcat服务器启动,你可以浏览http://127.0.0.1:8080/count.jsp来查看你的网页。

如果你没有正确安装JSTL,可能也没有错误信息提示。如果JSTL不能翻译你的标签,它们直接通过网页浏览器。网页浏览器将翻译这些标签作为未知的HTML标签。大多数浏览器都会忽略未知的HTML标签。

JSTL标签库

JSTL也常常作为一个单独的标签库。实际上,JSTL有4个标签库。这些标签库总结如下:

Core Tag Library―包括的标签是Web应用程序必不可少的。core tag库的例子包括循环,算式评估和基本的输入和输出。

Formatting/Internationalization Tag Library―包括的标签是用于解析代码的。其中一些标签是解析代码的,例如日期,不同的基于当前的区域。

Database Tag Library―包括的标签是用于访问SQL数据库的。这些标签通常只用于创建雏形程序。这是因为大多数程序不会从JSP网页上直接处理数据库访问。数据库访问应该置于EJBs中通过JSP网页进行访问。

XML Tag Library―包括的标签是可以用于访问XML元素。因为XML是用在很多的Web应用程序中,XML处理是JSTL一个重要的功能。

在本文中,我们只需要大概的看几个核心标签(core tags)。我们将举一个简单的例子来展示用户进入一个表格时如何处理数据。在我们进行这个程序之前,我们首先要看一看JSTL handles expressions。在JSTL中的表达式处理是通过使用EL表达式语言来完成的,像在JSP2.0中一样。在下一节中,我们将检查EL表达式语言。

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一个表格并从其中运行结果。能够这样做的一个简单的程序,见如下显示:

< %@ 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."。本页首先要检查看是否一个POST被完成了。这使得表格和处理表格的代码放在一个单一的页面中。这个是通过以下JSTL if 语句完成的。

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

这里你看到< c:if>标签使用了一个EL表达式来评估要求的方式是否是一个POST。如果数据被粘贴到网页,用户输入他们的猜测的值被储存在一个名字叫"guess"的参数中。这是因为"guess"被指定为表格输入条目的名字了。我们现在必须检查看一看那这个参数是否等于"Java"。这个通过以下的< c:if>标签来完成。

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

如你所见,如果语句评估正确,< c:if>标签的主体就被执行。在本文中,我们开始研究有关怎样安装JSTL和它是如何工作的基础知识。

JSTL的核心标签也包括了循环,反复和变量处理的标签。通过使用这些标签,你可以重复这些集合,访问用户对话数据和执行所有Web应用程序执行的其他的核心任务。除了core tag library,XML, database和formatting tag 库也提供了更先进的用途。

总结

本文向你展示了在JSTL和JSP scriptlet编程之间的一些不同之处。如你所看到的,JSTL承认一个更一致的编程环境,通过承认HTML和程序代码一起作为标签来表达。JSTL和标签库代表了网页编程的一个新的方法。

JSTL没有提供一个程序员需要创建一个完整功能网页应用程序的所有东西。此外,一些可以在JSTL中编程的程序往往最好是没有列入JSTL中。关于这个的一个最好的例子就是数据库JSTL标签。除了每个小的Web应用程序外,它通常被认为是不好的编程习惯就是嵌入实际的数据库命令到一个JSP网页中。这样的程序代码的恰当位置是在你的Web应用程序常使用的Java beans和EJBs中。对于这种惯例,你可以考虑创建自己的标签库。这样,你的JSP网页可以使用JSTL来执行基本的并非只是你的业务的编程程序。你应该完成你自己的标签库来执行组件,这些只对你的业务是独一无二的,也是在你的Web应用程序中用到的。

相关推荐