版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、如何用TomcatsMySQ生成动态内容安装 Tomcat 和 MySQL在这一节中,我们将逐步介绍Tomcat和MySQL的安装。然后,我们将向您介绍如何安装支持这两个应用程序相互通信所需的驱动程序。安装 Tomcat下载并安装 Tomcat。对于本文,我们使用了Tomcat 4.1 Windows版,它有一个很好的安装软件包,并且会为您创建图标和 Start 菜单文件夹。它还创建一个用于启动和停止 Tomcat服务器的"Windows服务(Windows Service )”。安装应该非常简单,但如果您遇 到麻烦,请查阅 Tomcat 文档。因为 Tomcat 非常流行,所以在新
2、闻组和 Web 上也可找到 大量的帮助,参考资料中列出了其中的一部分。安装了 Tomcat 之后, 还要完成几个步骤以设置我们的滚动横幅 Web 应用程序。 首先, 我们将在 installdirwebapps 目录下创建一个名为 banner 的子目录。然后在 banner 子目录下,创建标准的 Web 应用程序目录结构:installdirwebappsbannerinstalldirwebappsbannerWEB-INFinstalldirwebappsbannerWEB-INFclassesinstalldirwebappsbannerWEB-INFlib接下来,我们将添加指向我们W
3、eb应用程序的con text。con text 只是一个别名,它告诉 Tomcat 在哪里可以访问 Web 应用程序。 我们的 context 路径将是 /banner ,它将指 向我们刚刚创建的 banner 子目录。 在用户输入 http:/localhost:8080/banner后,将转至 webapps 下的顶级 banner 目录。如果他想运行我们的 BannerServlet (将存在于 WEB-INF/classes目 录 中 ), 他 可 以 使 用http:/localhost:8080/banner/servlet/BannerServlet。要添加 /banner c
4、ontext ,首先, 我们需要编辑 Tomcat conf 目录中的 server.XML 文 件。在接近该文件底部的位置, 您会看到几个 context 标记。 那里应该有一个用于 /admin 的 context 和一个用于 /examples 的 context 。请添加以下 context 标记:<!- BannerAd Context -><Context path= “/banner ”docBase=“banner”debug=“0”reloadable= “ truecrossContext= “ true ” />添加了 context 标记之后,重
5、新启动 Tomcat 以使对 server.xml 文件所做的更改生 效(在我们的示例中,我们只重新启动 Tomcat 安装的 Windows 服务)。安装 MySQLMySQL因其价格(免费)而成为一种强有力的数据库,许多公司都使用MySQL来处理它们的数据。由于许多公司都想以较低的预算进入Web市场,所以使用 MySQL的公司的数量每天都在增加。开放源码社区已张开双臂欢迎MySQL有关这个功能强大的数据库的文档十分丰富,而且同时有 Linux 和 Windows 版本。下载并安装 MySQ,L 采用“ Typical ”安装选项进行安装(对于本文,我们假定您使用MySQL的WinNT版本)
6、。完成安装后,您将注意到 MySQL个恼人的方面:它没有在 Start 菜单中放入任何东西。您需要到数据库的安装目录(缺省情况下是c:mysql )下,然后转至bin目录,在那里您会找到运行 MySQL的可执行文件。首先,双击 winmysqladmin.exe 文件。首次打开该文件时,会要求您输入用户名和密 码。接下来,在任务栏中出现的红绿灯图标上单击鼠标右键。 转至 WinNT 并选择“ Start the service ”以使 MySQL在后台运行。最后,双击“mysql.exe ”图标以启动“MySQL Monitor ”,您将在此使用MySQL使MySQL和Tomcat共同工作使M
7、ySQL和Tomcat相互通信可能有些困难。然而,通过使用JDBCAPI,我们将能够相对容易地从 Java类使用SQL与MySQL数据库通信。我们将使用 MMMySQLJDBC驱动程序(一个开放源码驱动程序),使MySQL和Tomcat之间的通信变得容易。 (在撰写本文时, 2.0.14 是其最新版本。 )遗憾的是,安装该驱动程序略微有些麻烦。 首先,要从这里下载该驱动程序的合适的 JAR 文件。我们下载了名为 mm.mysql-2.0.14-you-must-unjar-me.jar的文件。接下来,将文件解压缩(unjar或unzip )至一个临时目录。最后,将包含驱动程序的文件从解压缩的目
8、 录结构复制到 WEBAPPS/BANNER/WEB-INF/lib目录中,然后重新启动Tomcat。在我们下载的驱动程序版本中,文件的名称是 mm.mysql-2.0.14-bin.jar 。我们本可以使用 JDBC/ODBC桥驱动程序与 MySQL通信,但我们认为本机驱动程序在性 能上有更大优势(尽管我们没有运行任何基准测试程序来证实我们的假设)。对于这个应用程序,在性能上它可能不会有很大区别,但我们决定演示如何使用本机JDBC驱动程序,以便您不必在设计较大的应用程序时才去了解它。滚动横幅应用程序既然我们已经安装了所有的软件, 就让我们来看一下这个应用程序能够做什么以及我们 是如何组织其架
9、构和开发它的。实质上,您可以使用我们的横幅 servlet 执行两个操作。 首先,您可以用它查看 Web 页 面上的随机横幅图像,每次装入包含横幅广告的 Web 页面时,该随机横幅图像就会出现。 其次,您可以点击横幅图像,这将使您转至与装入的这个图像对应的链接。按照 HTM,L 其代码类似于:<a href= "Link For Random Image”<ccid_file values= "”Image"/ /></a>如果希望装入随机图像, 那么显然图像标记不能指向静态图像文件, 因此我们将指示它 运行 servlet ,本例中
10、将调用 BannerServlet 。我们将使用 HTTP GET 方法参数来指示 servlet 为我们提供图像。因此,图像标记类似于:<ccid_filevalues= ” http:/localhost:8080/banner/servlet/BannerServlet?type=image/“/>该标记调用servlet并传入参数键值对type=image。servlet 的service () 方法会解释该请求, 然后向浏览器返回随机图像。 当然, servlet 必须以某种方式记住将哪个图 像发送给了客户机, 这样当客户机点击该图像时, 它就知道应链接至何处。 我们会把
11、与发送 的图像相关的元数据存储在客户机的会话上, 这样,当用户点击图像时, 将从他的会话装入 元数据,并重新导向至适当的URL。链接标记看起来几乎与图像标记相同:<a href= ” http:/localhost:8080/banner/servlet/BannerServlet?type=link“><ccid_filevalues= ” http:/localhost:8080/banner/servlet/BannerServlet?type=image/“/></a>当用type=link键值对调用 servlet 时,servlet抓取横幅的元数
12、据并将用户重新路由至适当的 URL。代码和CLASSPATH设置为了使用与本文一起提供的代码,您必须首先解压缩这个zip 文件(在参考资料中) ,然后用命令行 javac 编译器或您喜欢的 IDE 编译这个 .java 文件。要编译该代码,请设 置CLASSPATH以包含这两个 JAR文件。mm.mySQL-2.0.14-bi n.jar (或从MMMySQL网站获取的其它任何版本)servlet.jar (如果它没有和您使用的 JDK 打包在一起)将 已 编 译 的 .class 文 件 复 制 到 先 前 创 建 的 tomcat_installdirwebappsbannerWEB-IN
13、Fclasses目录中。必须将作为示例提供的图像文件和 .htm 文件放入 tomcat_installdirwebappsbanner目录。数据库设置我们应用程序的数据库部分只是用来持久存储系统中每个横幅的元数据。换句话说,我们实际上并不在数据库中存储图像文件, 而只是存储指向每个图像文件的引用。 在我们的数 据库中,我们将使用七个列来描述每个横幅广告。表 1 中的描述说明了每条记录将包含的内容。我们实际上将在应用程序中只使用这七 个 数 据 库 列 中 的 五 个 。 我 们 的 版 本 中 没 有 使 用 CustomerName 和 NumberOfClicksPurchased ,但
14、我们把它们作为占位符放置在这里以用于扩展。您可以很容 易地扩展这个应用程序, 并把它用于现实的商业应用程序, 其中客户为每个横幅的点击次数 付款。表 1.数据库字段 字段名称 描述 示例ImageFile 对横幅图像物理位置的引用 /images/sitea.gif140139URL URL 站点用户点击横幅之后,应重新路由他们的目标CustomerName 购买横幅的客户名称 John DoeNumberOfClicksPurchased 用户购买的点击次数NumberOfClicksRemaining 客户剩余的点击次数NumberOfImpressions 横幅已被显示的次数 23根据您
15、的横幅”赞助商“支付的金BannerWeight 字段将 每个要显示的横幅所具有BannerWeight 正在显示的这一横幅的权重 10当然, 在现实环境中, 您会有一个以上的站点横幅。 额与其他赞助商的比较, 您可能希望较多地或较少地显示他的横幅。 被用来实现这一功能。 我们已经实现了一个非常简单的加权系统, 的百分比概率为:* 100BannerWeight / Sum of all BannerWeights )将刚才所说的内容转换成SQL您可以使用 MySQLMonitor输入以下语句:mysql> create database BANNER;要连接到数据库,您可以输入:mys
16、ql> use BANNER;接下来,我们创建表:mysql> create table ADS(IMAGEFILE VARCHA(R50) NOTNULL,URL VARCHA(R50) NOTNULL,CUSTOMERNAMVAERCHA(R50),NUMBEROFCLICKSPURCHAISNETD(4),NUMBEROFCLICKSREMAINIINGT(4) NOTNULL,NUMBEROFIMPRESSIOINST(4) NOT NULL,BANNERWEIGHINTT(4) NOT NULL); 您需要用一些样本值来填充数据库以便确定所构建的数据库是否正确。该项目的z
17、ip文件中包括一些样本横幅 (GIF 格式),可以使用它们以了解应用程序运行时的情况。当然,对于Web横幅URL需要声明您决定放置横幅文件的位置。可以按照下面的 SQL语法将横幅”注册“到数据库中:mysql> insert into ADSvalues ('/sitea.gif'','''',''John Doe'',100,100,0,10) ;使用这一语法将表 2 中显示的记录插入到数据库中。表 2.数据库记录 IMAGEFILE sitea.gif siteb.gif sitec.gif si
18、ted.gifURL http:/ http:/ http:/ http:/CUSTOMERNAMJoEhn Doe Albert Einstein Jane Doe MadonnaNUMBEROFCLICKSPURCHA1S0E0D 20 30 20NUMBEROFCLICKSREMAINI1N0G0 20 30 20NUMBEROFIMPRESSIO0NS0 0 0BANNERWEIGH1T0 10 30 10注:Web横幅URL位于本地主机,仅供测试之用。在生产环境中,URL会指向GIF文件的实际位置。该 URL 实际上可以是因特网上的任何位置。既然我们有了数据库,就需要使用刚刚填入其中
19、的数据。我们将用Java servlet 做到这一点。下面描述 Java servlet 代码,它将”推动“我们的努力。您或许希望花一些时间 来通读该项目 zip 文件中的 BannerServlet.java 代码。如果您觉得困难,别担心;我们 将花一些时间解释代码是如何工作的。横幅体系结构这个横幅广告 servlet 的体系结构十分简单。我们将使用四个类:通用的 Logger 类,一个将日志消息写到文本文件的类。名为 BannerServlet 的 servlet ,每次显示横幅图像(即每次装入页面)和每次点击 横幅图像时,将调用它。该 servlet 是我们应用程序的核心。通用的 DBH
20、andler类,BannerServlet将用它与 MySQL数据库进行通信。Banner 类,我们用它来创建对象,这些对象包含数据库中每个横幅所拥有的所有元数 据。该 BannerServlet 类和 Banner 类特定于我们的应用程序。它们相当简单,您可以方 便地扩展它们来添加更复杂的特性。DBHandler 和 Logger 类的好处在于: 您可以在任何您实际编写的、 需要与数据库通信 或写入日志文件的应用程序中重用这两个类。我们将更详细地讨论所有这四个类,这样您就可以理解 servlet 是如何工作的,以及 它如何使用 DBHandler与MySQL数据库通信。Logger 类Log
21、ger 类非常简单。它有单个字段,代表我们正在写入日志的File 对象。您可以将对单个 Logger 对象的引用传递给几个类,让这些类都写入同一个日志文件。 Logger 类允 许您做以下事情。您可以:创建日志记录器( logger )对象向日志文件添加分隔符(” “字符串)通过传入调用方法的名称和日志消息添加一条日志项添加方法启动的缺省消息添加方法结束的缺省消息删除日志文件返回由日志记录器对象使用的 File 对象我们将同时在 DBHandler 类和 BannerServlet 中使用 Logger 对象。DBHandler 类DBHandler 是非常多用途的类,可用来通过 JDBC 与
22、几乎任何数据库进行相互操作。 它 需要一个具有 JDBC/ODBC驱动程序(我们正用此驱动程序来连接到数据库)名称的字符串、一个具有数据库(我们为其设置了DSN名称的字符串和一个Logger参数。Logger参数在 DBHandler 完成其”神奇“任务时告诉它在哪里打印输出消息。 DBHandler 的构造器打 开到数据库的连接。在使用 DBHandler 完成任务后,必须用 close () 方法关闭它。在创建了 DBHandler 对象之后,必须创建查询来执行。使用 setQueryString () 方 法传入包含查询的字符串,查询可以是 PreparedStatement 类的形式。
23、PreparedStatement 是 JDBC 的一个很好的功能。 它允许您定义一个查询字符串, 使用 问号字符替代查询中的变量标准。随后可以使用 PreparedStatement 类的 setter 方法来 设置查询中未知元素的值。 幸运的是, DBHandler 类为我们处理所有这些事情。 我们只需设 置想要执行的查询,然后调用 DBHandler 的某个方法,如下所示:public Banner getBannerByName( Stringname) dbHandler.setQueryString (”SELECT * FROMADS WHERENAME=“? );ResultS
24、et rs = dbHandler.lookup ( name) ;dbHandler.close () ;可以使用lookup () 方法来执行 SELECT查询,使用 executeUpdate () 方法来执 行UPDATE查询,以及使用 insert () 方法来执行INSERT查询。还有一个 execute () 方法,它不需要参数,可以执行任何没有 PrepareStatement 参数的查询。Banner 类Banner类只是一组直接对应于ADS数据库表中各列的值的setter 和getter 方法。BannerServlet 类BannerServlet 是我们这个应用程序的核
25、心。 我们将把该类分成几个不同部分来向您讲 解。通过浏览代码,您将对如何用 DBHandler 类连接到数据库更加熟悉。字段BannerServlet 使用五个字段:String _databaseUrl :要访问数据库的名称( jdbc:odbc:localhostBANNER )。String _driverName :用来与数据库通信的驱动程序的名称。正如上面所描述的那样,我们将使用 MMMySQLJDBC驱动程序。该驱动程序的名称是org.gjt.mm.mysql.Driver 。Logger _logger : Logger 类的名称,用此类来记录我们应用程序中发生的所有事件。Has
26、hM ap_ba nners:所有 Bann er 对象的 HashMap 用 servlet 的 in it () 方法填 充该HashMap将数据库表中的每一行转换成存储在HashMap中的一个 Banner对象。我们过一会儿将详细说明这一点。int _totalWeight :所有 Banner 权重之和。该值也是在 init () 方法中设置的; 我 们将很快讨论这一点。init ()任何 servlet 的 init ( ServletConfig ) 方法都在容器首次装入该 servlet 时被调 用。在这里,容器就是 Tomcat。 Tomcat 生成并传入 ServletCon
27、fig 对象,该对象包含容 器设置的缺省配置信息以及开发人员(您)在 servlet 的配置文件中可以进行设置的定制 配置信息。对于我们的用途,不需要传入任何配置信息,但您有时可能需要扩展 servlet , 并使用这一功能。我们调用 super.init () 之后在 init () 中所做的第一件事是初始化 HashMap 变 量 _banners ,并将 _totalWeight 设置为 0。然后,连接到数据库,以ResultSet 的形式从 ADS 表获取所有行。我们使用 for 循环对 ResultSet 进行循环遍历,从每行构造一个 Banner对象,接着,把for循环的索引作为散
28、列值,将Banner对象添加到 HashMap (我们也可以方便地使用 Vector 或其它一些 Collection 类来完成同样的任务。 )现在,内存中有了一个包含所有Banner的HashMap如果更新数据库,那么只需调用init ( ) 方 法 就 可 重 新 装 入 HashMap。 我 们 将 在 increaseImpressions ( ) 和 decreaseClicksRemaining () 方法中用到这一点。service ()service () 方法是在我们的 BannerServlet 继承的 HttpServlet 类中定义的, 可以 处理任何请求,不管它是GET方法还是 POST方法。对于service ()方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45017-2024超疏水表面的力学稳定性测试方法
- 委外派遣合同范例
- 炉灶厂家供货合同范例
- 天津滨海职业学院《教育统计》2023-2024学年第一学期期末试卷
- 天津滨海汽车工程职业学院《汽车设计》2023-2024学年第一学期期末试卷
- 渠道砌筑施工方案
- 制作包装袋合同范例
- 中山劳务合同范例
- 个人树木买卖合同范例
- 兴安供热合同范例
- 2022版新课标下如何立足课程教学做好幼小衔接解读
- 班主任工作规范与政策法规
- 河南省郑州市二中共同体2023-2024学年八年级上学期期末数学试卷(含解析)
- 洛阳市2023-2024学年九年级上学期期末考试英语试题和答案
- 砂浆行业销售技巧分析
- 肠道门诊管理课件
- 小学禁毒教育教学大纲
- 北京市房山区2023-2024学年三年级上学期期末数学试卷
- 2024年中考英语二轮复习学案连词
- 《中国建筑股份有限公司施工企业质量管理办法》
- 肛肠科患者的疼痛管理策略与实践经验
评论
0/150
提交评论