用JSTL实现JSP应用程序快速开发
在这篇文章中,我将为大家介绍一种基于JSP且灵活有趣的技术,那就是JSTL.JSTL全称为JavaServerPagesStandardTagLibrary.虽然JSP已经变的非常流行,但JSTL在基于SQL数据库的简单、快速的前后台开发中还是没有被广泛的应用。一旦你了解了JSTL,你就会了解到它的优点,并发现在你作为程序员的日常工作中,它已经被应用到了很多方面。我这里假设你已经熟悉HTML,能理解基本的SQL语句,和Jsp的基础知识。因为下面的内容要涉及到这些知识。W0!pDm$
JSTL是一个已经被标准化的标记库集合,她支持迭代、条件、XML文档的解析,国际化,和利用SQL与数据库交互的功能。起初,JSTL规范一直由JCP(JavaCommunityprocessprogram)组织下的JSR#52发展完善,"JCP肩负着Java技术发展的重任"--官方网站这样评价。JCP作为一个开放性的组织,他同时吸收正式的会员和非正式会员.JCP对于Java技术规范的形成与发展发挥了重要的主导作用。JSTL主要包括四个基本部分的标记库:Core,XML,国际化,和对SQL的支持。由于这篇文章的主要是以其中的SQL部分的应用来快速了解JSTL,所以我们这篇文章只介绍了Core和SQl标签库的一些基本功能。@QiH:z7T
_`/pmc
这项技术简单而且功能强大,足以和PHP、ColdFusion一较高下.他在拓展Java的应用领域方面有足够的能力,这些领域不只包括大型的可再升级的Web应用程序,对于仅拥有简单主页的Web程序一样没问题。这允许你在建立站点的时候可以避免那些经常考虑的XML的集成和与数据库的连接。正如我刚才提到的一样,JSTL的关键点就是简单易用。还有,那就是JSTL是基于JSP构建的,他允许我们使用所有的Java技术,这一点我们有必要记住。hcS\IH]6
BZdO>83'
开始之前,我们需要弄清楚怎样才能运行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目录下即可,稍后我会具体说到该怎么做.t>}zyO5
2?U2)v
因为我们要在一个支持标准SQL的数据库上运行程序,你需要在你的电脑上安装有一个数据库。数据库的类型有许多种,这里我选择了MySql。我之所以选择他的原因在于首先,我们需要展示JSTL对于构造简单快速的应用程序领域所起的作用,同时能和一直在这个领域处于主导地位的PHP+MySql有所比较;第二点那就是MySql是可以免费下载并包含有一个针对JAVA的JDBC驱动.总之,为了使用下面的例子,你需要下载一个MYSQL服务器(http://www.mysql.com/products/mysql/index.html;MySqlConnector/JJDBC驱动程序http://www.mysql.com/products/connector-j/index.html;还有就是MySqlcontrolcenterhttp://www.mysql.com/products/connector-j/index.html),这个产品可以让你非常容易的操作管理Mysql数据库文件。全部下载完成后,你需要安装mysql和mysqlControlCenter。另外还有就是mysql的JDBC驱动需要放到你的web应用程序中的/Web-INF/lib目录中。aBnX]9P}
3W#0d`|
在创建程序代码之前,你需要创建并填写数据库表。关于这方面的主题文章也相当广泛,具体如何操作超出了本文的范围。这里我推荐给你我们上面提及的一个可视化的管理工具MySQLControlCenter.你可以用他来创建一个用来运行程序的测试用户,数据库以及创建一个测试表,并填写若干记录。关于登陆名及密码数据库名称这些配置环境参数,你应该记住他们,稍后需要应用到我们的代码中。Xu/^th>
8S-Ihyc%
现在,你就可以准备创建自己的第一个JSTL应用程序了它需要我们做下面一些事情:@n!u80N
p>YW',}<
整个实例程序代码包括两个文件Hello.jsp和Continue.jsperykOK"N8
UcM+V0
Hello.jsp文件允许你输入数据库名称、登陆名称、登陆密码、数据库表名。Continue.jsp:接受Hello.jsp中的数据信息并且连接数据库,并对数据库中的表执行一个Select请求.Xz^YF<
EnZw"lz
下面是这个系统所有的代码文件,我将逐一进行解释。这些代码相当简单,对于代码的结构,我相信你即使没有我的解释你也能理解的.7c:'+/4)
90^7D!:5^
1:<!--Hello.jsp--><wu!l^<S
2:<html>}Q]=gcQ
3:<head>fK`q4S$J
4:<title>Hello</title>sp$^<""DN9
5:</head>~\!jHq_f
6:<bodybgcolor="#ffffff">_h4T
7:<h1>Please,enterallnecessaryinformationandclickOK.</h1>GC'b%<`
8:<formmethod="post"action="Continue.jsp">".;Fb_
9:<br>Yourlogintodatabase:9kKE"sN
<inputtype="text"name="login"size="15">;)W@puW)?
10:<br>Yourpasswordtodatabase:4pKLpc'PV
<inputtype="password"name="password"size="15">_#[vW\ZY
11:<br>Yourdatabasename:NwR)/y99
<inputtype="text"name="database"size="15">UA!U>Yr_\
12:<br>Yourdatabasetable:}S]/P0Q
<inputtype="text"name="table"size="15">d&56w:Lq^
13:<br><br><inputtype="submit"name="submit"value="OK">6h5&I4T$
14:</form>g>B@xHFq
15:</body>J=*p8V7
16:</html>LN;{_2
N.2nHdOP/q
(请注意文本左侧的数字只是为你提供一些标记信息,你不需要将他们输入到你的代码文件中。)pOnt,NZ
gra(j
上面就是所有Hello.jsp的源代码,很惊奇吧,他仅仅是纯粹的HTML代码,就这么简单,我想应该没有注释的必要了.我之所以将这些代码片段包含进文章中就是为了展示一下JSTL集成到那些需要快速扩充额外功能的HTML站点中是多么的简单.让我再为你展示一下Continue.jsp的全部代码,看过之后,你就会对JSTL有些了解了。p^aVz
MS}>dp
1:<!--Continue.jsp-->\q@\r4
2:<%@taglibprefix="c"uri="http://java.sun.com/jstl/core"%>6BZyBqkym
3:<@taglibprefix="sql"uri="http://java.sun.com/jstl/sql"%>O9K]~
4:<c:setvar="h"value="localhost"/><$2:}V*#
5:<c:setvar="l"value="${param.login}"/>H~G;B\L
6:<c:setvar="p"value="${param.password}"/>?1T+<3f
7:<c:setvar="d"value="${param.database}"/>ai%Z~f>p
8:<c:setvar="t"value="${param.table}"/>|Lpq_1;|
9:<html>Z6V'I
10:<head>A$1t6Lai
11:<title>Continue</title>DJ<cFD
12:</head>;\X1aP
13:<bodybgcolor="#ffffff">@EmLA
14:<sql:setDataSourcedriver="com.mysql.jdbc.Driver"k6O4Q$X
url="jdbc:mysql://${l}/${d}?user=${u}&password=${p}"/>1FB3Fh
15:<sql:queryvar="result">?#!l?Uf<
16:SELECT*FROM<c:outvalue="${t}"/>e'Mqe+!
17:</sql:query>%"Z7!U
18:<c:forEachvar="row"items="${result.rowsByIndex}">Z`fKh5;t
19:<c:outvalue="${row[0]}"/><br>=EJ'"9[Z
20:</c:forEach>!QRnv-`
21:</body>"'_Jgt\t
22:</html>dqiE:=J
|U^isW
(请注意文本左侧的数字只是为你提供一些标记信息,你不需要将他们输入到你的代码文件中。)^]/f?^
ZE25nHF
这就是我们所有的代码了,是不是非常不错?现在我门来解释一下上面这些代码的作用。*Qt(}"i
DjvK5/N
行1是HTML的注释说明。=fGKLM>u
}f;Ub7
行2--3这些JSP标签是为了引用外部的标签库,更确切的说这里是引用了JSTL库中的Core和SQL标签库部分。我们为他们都设置了前缀名称,以便于我们通过这些前缀名称访问被引入的标签库中的功能方法。T]bQc*Z
b2$[=r%X
行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中用户所输入的密码,数据库名称,数据表名称。+^Aj%+Y
}J#h;]t>F
行9--13是一些我经常用来常见HTML网页头的简单的HTML标签,马上,重要的功能马上要到了。?Sjb7.Q.2
e:/9@
行14,我们试图用我们先前获得的mysql驱动程序(com.mysql.jdbc.Driver)建立数据库连接,在URL中,我们指明数据库连接所需要的参数,象数据库名称,主机名称,登陆名及登陆密码。依此,我们可以用其它任何的JDBC驱动程序连接其相对的数据库。如果我们需要连接其他的SQL数据库,只需更改这个URL就够了。NfmWkkcI
KS"YCzXa
行15--17这里我们执行了一个Select查询,请特别注意第16行,我们使用了另一个JSTL功能函数<c:out用来输出我们所获取的数据表名称,这里我们同样可以使用其他的SQL命令,比如说INSERT,DELETE,等等。要执行这些没有返回值的查询请求,你就需要使用<sql:updateJSTL功能函数了。他可以直接执行他们就象<SQL:query一样,只是执行它是不需要特别指定结果变量来存储语句执行返回的结果。vd|:V<((
wQi6V|
行18--20既然我们执行了上面的SELECT查询语句,我们就应该把他的返回结果显示出来。<c:forEach就是JSTL中一个具有迭代功能的函数,执行它时,我们通过${result.rowsByIndex}将返回的每一个数据行信息返回给变量${row},紧接着在第19行,我们通过<c:outvalue="${row[0]}"/>显示返回的每个数据行的第一个数据列中的值。只要你的数据表中包含的字段,你都可以通过改变变量${row}中的数字大小来对请求表中的任意一个字段中的值对他们进行访问。5;0@O,g<
%Gd8~sy`
行21--22是HTML页脚iAYvWA<
L$6D(>e
在你亲自创建JSTL应用程序过程中,可能你还没有发现它有多么的强大,但你应该能够意识到JSTL的功能函数的简单和高效性,试想有了JSTL,整合出一个基于SQL的新闻专栏是何等的快速,集成你现有的web站点是何等的容易。Zl0AI#:j
,~Qup5
很好,我们的代码很容易理解的,即使一个非专业程序员的话,打个比方就算是一个设计师也能够读懂它,理解它,还可能进行部分的修改,起码是页面布局上的修改。UR<'@|Y
,|u25{3Kx
正如我们开始的时候所提到的,为了使我们的JSTL代码正常的运行,我们需要安装MysqlConnector/J中的JAR文件,当然还有JSTL。因为我们使用了Tomcat这个JSp容器,你需要在Tomcat的文件目录Webapps下创建你自己的文件夹,将你的Hello.jsp、Continue.jsp文件放在你创建的文件目录中,在你创建的目录中你还要创建一个叫做WEB-INF的文件夹,将你的配置文件Web.xml放在里面,web.xml文件如下:d^u{3?`tj!
NN;u[,b
<?xmlversion="1.0"encoding="UTF-8"?>n2aE=:
<!DOCTYPEweb-app.(,Y"<
PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN",m^*0bIM~
"http://java.sun.com/dtd/web-app_2_3.dtd">"mc*@9k
<web-app/>)y%-_b@
^I,GF{
接下来我们还需要在WEB-INF下创建一个叫做lib的子目,并将下列文件放进去:=hmQgF-({I
6jYRI3\T
jstl.jarAnNniSV
saxpath.jara5a^FD&l
standard.jar>c}vhmV
mysql-connector-java-3.0.9-stable-bin.jar(注意,这个名称依据你的MysqlConnector/J版本不同可能会有所变化)