jstl是一个已经被标准化的标记库集合,她支持迭代、条件、xml文档的解析,国际化,和利用sql与数据库交互的功能。jstl主要包括四个基本部分的标记库:core,xml,国际化,和对sql的支持。由于这篇文章的主要是以其中的sql部分的应用来快速了解jstl,所以我们这篇文章只介绍了 core和sql标签库的一些基本功能。
这项技术简单而且功能强大,足以和php、coldfusion一较高下.他在拓展java的应用领域方面有足够的能力,这些领域不只包括大型的可再升级的web应用程序,对于仅拥有简单主页的web程序一样没问题。这允许你在建立站点的时候可以避免那些经常考虑的xml的集成和与数据库的连接。jstl的关键点就是简单易用。还有,那就是jstl是基于jsp构建的, 他允许我们使用所有的java技术。
开始之前,我们需要弄清楚怎样才能运行jstl.由于是基于jsp技术的,所以我们运行它就需要一个能够编译jsp的容器,这里我们使用免费的jsp容器:tomcat(http://jakarta.apache.org/tomcat/index.html).至于如何安装这个产品已经超出了本文所讲述的范围。毫无疑问,这个软件产品现在已经很普及了,而且关于如何安装的文档资料也是很多。这里假设您已经安装并成功配置了这个容器,你只需再安装jstl运行所需文件它可以从这里下载http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html你不需要真正的安装它,只需要将其中的.jar文件包含到你的应用程序的web-inf/lib目录下即可。
因为我们要在一个支持标准sql的数据库上运行程序,你需要在你的电脑上安装有一个数据库。数据库的类型有许多种,这里我选择了mysql。我之所以选择他的原因在于首先,我们需要展示jstl对于构造简单快速的应用程序领域所起的作用,同时能和一直在这个领域处于主导地位的php+mysql有所比较;第二点那就是mysql是可以免费下载并包含有一个针对java的jdbc驱动.总之,为了使用下面的例子,你需要下载一个mysql服务器(http://www.mysql.com/products/mysql/index.html; mysql connector/j jdbc驱动程序http://www.mysql.com/products/connector-j/index.html;还有就是mysql control center http://www.mysql.com/products/connector-j/index.html),这个产品可以让你非常容易的操作管理mysql数据库文件。全部下载完成后,你需要安装mysql和mysql control center。另外还有就是mysql的jdbc驱动需要放到你的web应用程序中的/web-inf/lib目录中。
在创建程序代码之前,你需要创建并填写数据库表。关于这方面的主题文章也相当广泛,具体如何操作超出了本文的范围。这里我推荐给你我们上面提及的一个可视化的管理工具 mysql control center.你可以用他来创建一个用来运行程序的测试用户,数据库以及创建一个测试表,并填写若干记录。关于登陆名及密码数据库名称这些配置环境参数,你应该记住他们,稍后需要应用到我们的代码中。
现在,你就可以准备创建自己的第一个jstl应用程序了它需要我们做下面一些事情:
整个实例程序代码包括两个文件hello.jsp和 continue.jsp
hello.jsp文件允许你输入数据库名称、登陆名称、登陆密码、数据库表名。continue.jsp:接受hello.jsp中的数据信息并且连接数据库,并对数据库中的表执行一个select请求.
下面是这个系统所有的代码文件,我将逐一进行解释。这些代码相当简单,对于代码的结构,我相信你即使没有我的解释你也能理解的.
1: <!-- hello.jsp -->
2: <html>
3: <head>
4: <title>hello</title>
5: </head>
6: <body bgcolor="#ffffff">
7: <h1>please, enter all necessary information and click ok.</h1>
8: <form method="post" action="continue.jsp">
9: <br>your login to database:
<input type="text" name="login" size="15">
10: <br>your password to database:
<input type="password" name="password" size="15">
11: <br>your database name:
<input type="text" name="database" size="15">
12: <br>your database table:
<input type="text" name="table" size="15">
13: <br><br><input type="submit" name="submit" value=" ok ">
14: </form>
15: </body>
16: </html>
(请注意文本左侧的数字只是为你提供一些标记信息,你不需要将他们输入到你的代码文件中。)
上面就是所有hello.jsp的源代码,很惊奇吧,他仅仅是纯粹的html代码,就这么简单,我想应该没有注释的必要了.我之所以将这些代码片段包含进文章中就是为了展示一下jstl集成到那些需要快速扩充额外功能的html站点中是多么的简单.让我再为你展示一下continue.jsp的全部代码,看过之后,你就会对 jstl有些了解了。
1: <!-- continue.jsp -->
2: <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
3: <@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
4: <c:set var="h" value="localhost"/>
5: <c:set var="l" value="${param.login}"/>
6: <c:set var="p" value="${param.password}"/>
7: <c:set var="d" value="${param.database}"/>
8: <c:set var="t" value="${param.table}"/>
9: <html>
10: <head>
11: <title>continue</title>
12: </head>
13: <body bgcolor="#ffffff">
14: <sql:setdatasource driver="com.mysql.jdbc.driver"
url="jdbc:mysql://${l}/${d}?user=${u}&password=${p}"/>
15: <sql:query var="result">
16: select * from <c:out value="${t}"/>
17: </sql:query>
18: <c:foreach var="row" items="${result.rowsbyindex}">
19: <c:out value="${row[0]}"/><br>
20: </c:foreach>
21: </body>
22: </html>
(请注意文本左侧的数字只是为你提供一些标记信息,你不需要将他们输入到你的代码文件中。)
这就是我们所有的代码了,是不是非常不错?现在我门来解释一下上面这些代码的作用。
行1 是 html 的注释说明。
行2--3 这些 jsp 标签是为了引用外部的 标签库,更确切的说这里是引用了jstl库中的 core 和sql标签库部分。我们为他们都设置了前缀名称,以便于我们通过这些前缀名称访问被引入的标签库中的功能方法。
行4---8正如 hello.jsp 真正运行的样子,他将请求continue.jsp,continue.jsp获得请求后就需要得到并解析来自hello.jsp的若干变量,我们使用了这样的方式${param.your_var}。在第4行<c:set标签,将变量${h}设置为 "localhost",第五行变量${l}将获取我们在 hello.jsp中的login文本域中输入的信息,第6,7,8行的变量将分别获得来自hello.jsp中用户所输入的密码,数据库名称,数据表名称。
行9--13是一些我经常用来常见html网页头的简单的html标签,马上,重要的功能马上要到了。
行14,我们试图用我们先前获得的mysql驱动程序(com.mysql.jdbc.driver)建立数据库连接,在url中,我们指明数据库连接所需要的参数,象数据库名称,主机名称,登陆名及登陆密码。依此,我们可以用其它任何的jdbc驱动程序连接其相对的数据库。如果我们需要连接其他的sql数据库,只需更改这个 url就够了。
行15--17 这里我们执行了一个select 查询,请特别注意第16行,我们使用了另一个jstl功能函数<c:out 用来输出我们所获取的数据表名称,这里我们同样可以使用其他的sql命令,比如说 insert,delete,等等。要执行这些没有返回值的查询请求,你就需要使用<sql:update jstl功能函数了。他可以直接执行他们就象<sql:query一样,只是执行它是不需要特别指定结果变量来存储语句执行返回的结果。
行18--20 既然我们执行了上面的select查询语句,我们就应该把他的返回结果显示出来。<c:foreach 就是jstl 中一个具有迭代功能的函数,执行它时,我们通过${result.rowsbyindex}将返回的每一个数据行信息返回给变量${row},紧接着在第19行,我们通过<c:out value="${row[0]}"/>显示返回的每个数据行的第一个数据列中的值。只要你的数据表中包含的字段,你都可以通过改变变量 ${row}中的数字大小来对请求表中的任意一个字段中的值对他们进行访问。
行21--22是html 页脚
在你亲自创建jstl应用程序过程中,可能你还没有发现它有多么的强大,但你应该能够意识到jstl的功能函数的简单和高效性,试想有了jstl,整合出一个基于sql的新闻专栏是何等的快速,集成你现有的web站点是何等的容易。
很好,我们的代码很容易理解的,即使一个非专业程序员的话,打个比方就算是一个设计师也能够读懂它,理解它,还可能进行部分的修改,起码是页面布局上的修改。
正如我们开始的时候所提到的,为了使我们的jstl代码正常的运行,我们需要安装mysql connector/j 中的jar 文件,当然还有 jstl。因为我们使用了tomcat这个jsp 容器,你需要在tomcat的文件目录webapps下创建你自己的文件夹,将你的hello.jsp 、continue.jsp文件放在你创建的文件目录中,在你创建的目录中你还要创建一个叫做web-inf 的文件夹,将你的配置文件web.xml放在里面,web.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<!doctype web-app
public "-//sun microsystems, inc.//dtd web application 2.3//en"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app />
接下来我们还需要在web-inf下创建一个叫做lib的子目,并将下列文件放进去:
jstl.jar
saxpath.jar
standard.jar
mysql-connector-java-3.0.9-stable-bin.jar (注意,这个名称依据你的mysql connector/j版本不同可能会有所变化)
新闻热点
疑难解答