当前位置:七道奇文章资讯数据防范MySQL防范
日期:2011-05-02 15:44:00  来源:本站整理

用Tomcat和MySQL生成动态内容[MySQL防范]

赞助商链接



  本文“用Tomcat和MySQL生成动态内容[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

接下来,我们成立表:


mysql> create table ADS
(IMAGEFILE VARCHAR(50) NOT NULL, 
URL VARCHAR(50) NOT NULL,
CUSTOMERNAME VARCHAR(50),
NUMBEROFCLICKSPURCHASED INT(4),
NUMBEROFCLICKSREMAINING INT(4) NOT NULL,
NUMBEROFIMPRESSIONS INT(4) NOT NULL,
BANNERWEIGHT INT(4) NOT NULL);

ADS 表的"describe"操作近似于图 1 所示.

图 1. ADS 表

您需求用一些样本值来填充数据库以便肯定所构建的数据库能否精确.该项目的 zip 文件中包含一些样本横幅(GIF 格局),可以利用它们以理解利用程序运行时的情形.当然,关于 Web 横幅 URL,需求声明您决意安排横幅文件的位置.可以按照下面的 SQL 语法将横幅"注册"到数据库中:


mysql> insert into ADS values('/sitea.gif','http://www.cnn.com',
  'John Doe',100,100,0,10);

利用这一语法将表 2 中显示的记录插入到数据库中.

表 2. 数据库记录

IMAGEFILE sitea.gif siteb.gif sitec.gif sited.gif
URL http://www.cnn.com http://www.news.com http://www.ibm.com http://www.yahoo.com
CUSTOMERNAME John Doe Albert Einstein Jane Doe Madonna
NUMBEROFCLICKSPURCHASED 100 20 30 20
NUMBEROFCLICKSREMAINING 100 20 30 20
NUMBEROFIMPRESSIONS 0 0 0 0
BANNERWEIGHT 10 10 30 10

注:Web 横幅 URL 位于本地主机,仅供测试之用.在生产环境中,URL 会指向 GIF 文件的实际位置.该 URL 实际上可以是因特网上的任何位置.

既然我们有了数据库,就需求利用方才填入此中的数据.我们将用 Java servlet 做到这一点.下面描写 Java servlet 代码,它将"推动"我们的勤奋.您大概但愿花一些时间来通读该项目 zip 文件中的 BannerServlet.java 代码.假如您认为艰难,别耽忧;我们将花一些时间注释代码是若何工作的.

横幅体系构造

这个横幅广告 servlet 的体系构造非常简单.我们将利用四个类:

  • 通用的 Logger 类,一个将日记消息写到文本文件的类.

  • 名为 BannerServlet 的 servlet,每次显示横幅图象(即每次装入页面)和每次点击横幅图象时,将调用它.该 servlet 是我们利用程序的核心.

  • 通用的 DBHandler 类, BannerServlet 将用它与 MySQL 数据库举行通信.

  • Banner 类,我们用它来成立对象,这些对象包含数据库中每个横幅所拥有的全部元数据.

BannerServlet 类和 Banner 类特定于我们的利用程序.它们相当简单,您可以便利地扩大它们来增添更复杂的特点.

DBHandlerLogger 类的好处在于:您可以在任何您实际编写的、需求与数据库通信或写入日记文件的利用程序中重用这两个类.

我们将更具体地谈论全部这四个类,这样您便可以理解 servlet 是若何工作的,以及它若何利用 DBHandler 与 MySQL 数据库通信.

Logger 类

Logger 类非常简单.它有单个字段,代表我们正在写入日记的 File 对象.您可以将对单个 Logger 对象的引用传送给几个类,让这些类都写入同一个日记文件. Logger 类答应您做以下事情.您可以:

  • 成立日记记录器(logger)对象
  • 向日记文件增添脱离符("------"字符串)
  • 通过传入调用办法的名称和日记消息增添一条日记项
  • 增添办法启动的缺省消息
  • 增添办法完毕的缺省消息
  • 删除日记文件
  • 返回由日记记录器对象利用的 File 对象

我们将同时在 DBHandler 类和 BannerServlet 中利用 Logger 对象.

DBHandler 类

DBHandler 是非常多用处的类,可用来通过 JDBC 与几近任何数据库举行彼此操作.它需求一个具有 JDBC/ODBC 驱动程序(我们正用此驱动程序来衔接到数据库)名称的字符串、一个具有数据库(我们为其设置了 DSN)名称的字符串和一个 Logger 参数. Logger 参数在 DBHandler 完成其"奇异"任务时奉告它在那边打印输出消息. DBHandler 的构造器翻开到数据库的衔接.在利用 DBHandler 完成任务后,必须用 close() 办法关闭它.

在成立了 DBHandler 对象之后,必须成立查询来履行.利用 setQueryString() 办法传入包含查询的字符串,查询可以是 PreparedStatement 类的情势.

PreparedStatement 是 JDBC 的一个很好的功效.它答应您定义一个查询字符串,利用问号字符替换查询中的变量尺度.随后可以利用 PreparedStatement 类的 setter 办法来设置查询中未知元素的值.幸运的是, DBHandler 类为我们处理全部这些事情.我们只需设置想要履行的查询,然后调用 DBHandler 的某个办法,以下所示:


public Banner getBannerByName(String name) {
        ...
        ...
        dbHandler.setQueryString("SELECT * FROM ADS WHERE NAME=?");
        ResultSet rs = dbHandler.lookup(name);
        dbHandler.close();
        ...
        ...
}

可以利用 lookup() 办法来履行 SELECT 查询,利用 executeUpdate() 办法来履行 UPDATE 查询,以及利用 insert() 办法来履行 INSERT 查询.还有一个 execute() 办法,它不需求参数,可以履行任何没有 PrepareStatement 参数的查询.

Banner 类

Banner 类只是一组直接对应于 ADS 数据库表中各列的值的 settergetter 办法.

BannerServlet 类

BannerServlet 是我们这个利用程序的核心.我们将把该类分成几个差别部份来向您讲授.通过浏览代码,您将对若何用 DBHandler 类衔接到数据库越发熟习.

字段
BannerServlet 利用五个字段:

  • String _databaseUrl:要拜候数据库的名称( jdbc:odbc:\\localhost\BANNER ).

  • String _driverName:用来与数据库通信的驱动程序的名称.正如上面所描写的那样,我们将利用 MM MySQL JDBC 驱动程序.该驱动程序的名称是 org.gjt.mm.mysql.Driver .

  • Logger _logger: Logger 类的名称,用此类来记录我们利用程序中发生的全部事件.

  • HashMap _banners:全部 Banner 对象的 HashMap.用 servlet 的 init() 办法填充该 HashMap.将数据库表中的每一行转换成存储在 HashMap 中的一个 Banner 对象.我们过一会儿将具体阐明这一点.

  • int _totalWeight:全部 Banner 权重之和.该值也是在 init() 办法中设置的;我们将很快谈论这一点.

init()
任何 servlet 的 init(ServletConfig) 办法都在容器初次装入该 servlet 时被调用.在这里,容器就是 Tomcat.Tomcat 生成并传入 ServletConfig 对象,该对象包含容器设置的缺省配置信息以及开辟人员(您)在 servlet 的配置文件中可以举行设置的定制配置信息.关于我们的用处,不需求传入任何配置信息,但您有时大概需求扩大 servlet,并利用这一功效.

我们调用 super.init() 之后在 init() 中所做的第一件事是初始化 HashMap 变量 _banners ,并将 _totalWeight 设置为 0.然后,衔接到数据库,以 ResultSet 的情势从 ADS 表获得全部行.我们利用 for 循环对 ResultSet 举行循环遍历,从每行构造一个 Banner 对象,接着,把 for 循环的索引作为散列值,将 Banner 对象增添到 HashMap.(我们也可以便利地利用 Vector 或别的一些 Collection 类来完成一样的任务.)

目前,内存中有了一个包含全部 Banner 的 HashMap.假如更新数据库,那么只需调用 init() 办法便可重新装入 HashMap.我们将在 increaseImpressions()decreaseClicksRemaining() 办法顶用到这一点.

service()
service() 办法是在我们的 BannerServlet 担当的 HttpServlet 类中定义的,可以处理任何恳求,不管它是 GET 办法还是 POST 办法.关于 service() 办法的实现有两个核心部份.第一个部份处理 Web 页面发送图象恳求时 servlet 的行为,第二部份处理链接恳求.

最后,我们看一下从客户机发送来的 type 参数.假如 type 的值是 image ,那么我们从数据库获得一个随机的 Banner 对象,将该 Banner 对象增添到用户的会话,同时增添这一给定横幅的已显示次数,并将用户路由至 Banner 对象的图象字段中所引用的图象.

假如 type 的值是 link ,那么我们从会话中除去 Banner 对象,削减该横幅的剩余点击次数,并将用户重定向至 Banner 对象的 URL 字段中指定的链接.

别的办法
getRandomBanner()increaseImpressions()decreaseClicksRemaining() 都是助手办法,从 service 办法中调用它们. getRandomBanner() 利用一个简单的算法从 _banners HashMap 随机地挑选一个横幅. increaseImpressions()decreaseClicksRemaining() 利用 DBHandler 衔接到数据库并更新给定 Banner 的信息.在这两个办法的完毕部份,我们调用 init() 办法将已更新的 Banner 信息重新装入到 HashMap.

完毕语

我们已经成立一个利用程序,该利用程序演示了 Apache Tomcat 和 MySQL 彼此之间若何通信,并向您供应了一个能为您处理大大都数据库工作的、非常有效的可重用工具.您可以以几种方法来扩大这个利用程序,这些已超越本文的范围.正如我们前面描写的那样,您可以把这个利用程序扩大成一个系统,在这个系统中,您可以按照特定点击次数大概乃至是特定的显示次数向客户收费.可以很简单地用某个别的字段替换数据库中的 CustomerName 字段,这个字段可以是另一个包含全部客户信息的表中的主键.

您可以扩大 DBHandler 类以处理数据库衔接实用.此外,可以将但愿用于利用程序的查询具体化成文本、特点或 XML 文件,从而答应扩大或更改查询定义而无需编写更多代码.

上一页  [1] [2] 


  以上是“用Tomcat和MySQL生成动态内容[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>利用Apache+Tomcat比单独利用Tomcat的优缺陷</b>
  • 用Tomcat和MySQL生成动态内容
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .