|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。mysql|告白 创立本人的基于Java的转动横幅告白
站长注:之前做过这个例子,不外好象是mysql4.012+tomcat4,如今这两个软件都晋级了,并且我本人正筹办在一个web使用中利用mysql5+tomcat5.5。把这个例子再调试一下,还真发明了两个成绩:
1、要在web.xml文件中定名BannerServlet,以下所示:
<?xmlversion="1.0"encoding="ISO-8859-1"?>
<!DOCTYPEweb-appPUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>BannerServlet</servlet-name>
<servlet-class>img.BannerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BannerServlet</servlet-name>
<url-pattern>/BannerServlet</url-pattern>
</servlet-mapping>
</web-app>
2、BannerServlet.java中有两处要修改:
dbHandler.setQueryString("UPDATEADSSETNUMBEROFIMPRESSIONS=[NUMBEROFIMPRESSIONS]+1WHEREIMAGEFILE=?");
改成:
dbHandler.setQueryString("UPDATEADSSETNUMBEROFIMPRESSIONS=NUMBEROFIMPRESSIONS+1WHEREIMAGEFILE=?");
dbHandler.setQueryString("UPDATEADSSETNUMBEROFCLICKSREMAINING=[NUMBEROFCLICKSREMAINING]-1WHEREIMAGEFILE=?");
改成:
dbHandler.setQueryString("UPDATEADSSETNUMBEROFCLICKSREMAINING=NUMBEROFCLICKSREMAINING-1WHEREIMAGEFILE=?");
象doubleclick.net如许的公司依托在Web上供应横幅告白服务已赚了良多钱。他们供应的服务很棒,但为何要为本人原本能够做的事变而付钱呢?在本文中,企业Java参谋JavidJamae和KulvirBhogal将演示怎样利用全开放源码情况:ApacheTomcat、MySQL和MySQLJDBC驱动程序,来创立转动横幅告白。起首,他们将向您慢慢先容必须的Tomcat和MySQL安装,然后向您演示怎样安装MySQLJDBC驱动程序以同意运转在Tomcat中的Javaservlet与MySQL举行通讯。
当因特网入手下手从教导和当局信息存储器变化成国际贸易中央起,横幅告白就已呈现了。转动横幅是Web页面上一块已分派的空间,每次装进或从头装进Web页面时,就用该空间内来显现告白―随机显现或基于某些营业逻辑来显现。驱动转动横幅告白的程序固然相称复杂,但倒是主要的告白工具。正如它们的同类,如半分钟播送和电视告白一样,这些静态告白工具同意单个Web页面显现分歧来历的告白,并使分歧公司针对不异的不雅众创建他们产物和服务的品牌效应。
不管您怎样对待Web横幅告白(是的,我们都发明它们偶然使人厌恶),它们已成为因特网上的一种生存体例。存在如许的现实:Web的不雅众由复杂的消耗者群体所构成,他们的款项使电子商务的车轮得以动弹。在因特网市场营销的长久汗青中,电子商务一切者已体现出他们乐意花年夜把的钱在抢手站点上做横幅告白。
有些公司(如doubleclick.net)已经由过程承当使用程序服务供给商(ASP),供应诸如跟踪对特定横幅告白的点击之类的服务,从Web横幅征象中赢利。随后这些ASP告知告白客户他们的Web告白举动的无效水平。
固然,象doubleclick.net如许的ASP是要免费的。假如您和我们一样,那末您不会乐意在可以收费失掉服务时还要费钱。稍等一会儿―您大概已听过世上没有收费的午饭这句话。不外别忧虑。本文将消费的只是您的工夫。现实上,我们将向您演示怎样构成一个开放源码(即收费)情况来创建您本人的功效壮大的Web横幅跟踪体系。为了完成这一义务,我们选择的“兵器”是Tomcat、MySQL、一个Javaservlet和几个助手类。镇静吗?那末,让我们举行软件安装吧。
安装Tomcat和MySQL
在这一节中,我们将慢慢先容Tomcat和MySQL的安装。然后,我们将向您先容怎样安装撑持这两个使用程序互相通讯所需的驱动程序。
安装Tomcat
下载并安装Tomcat。关于本文,利用Tomcat5.5Windows版,它有一个很好的安装软件包,安装应当十分复杂,但假如您碰到贫苦,请查阅Tomcat文档。由于Tomcat十分盛行,以是在旧事组和Web上也可找到大批的匡助。
安装了Tomcat以后,还要完成几个步骤以设置我们的转动横幅Web使用程序。起首,我们将在[installdir]webapps目次下创立一个名为banner的子目次。然后在banner子目次下,创立尺度的Web使用程序目次布局:- [installdir]webappsanner[installdir]webappsannerWEB-INF[installdir]webappsannerWEB-INFclasses[installdir]webappsannerWEB-INFlib
复制代码 接上去,我们将增加指向我们Web使用程序的context。context只是一一般名,它告知Tomcat在那里能够会见Web使用程序。我们的context路径将是/banner,它将指向我们方才创立的banner子目次。在用户输出http://localhost:8080/banner后,将转至webapps下的顶级banner目次。假如他想运转我们的BannerServlet(将存在于WEB-INF/classes目次中),他可使用http://localhost:8080/banner/BannerServlet。
要增加/bannercontext,起首,我们必要编纂Tomcatconf目次中的server.xml文件。在<Host>和</host>之间加上
- <!--BannerAdContext--><Contextpath="/banner"docBase="banner"debug="0"reloadable="true"crossContext="true"/>
复制代码 增加了context标志以后,从头启动Tomcat以使对server.xml文件所做的变动失效.
安装MySQL
MySQL因其代价(收费)而成为一种强无力的数据库,很多公司都利用MySQL来处置它们的数据。因为很多公司都想以较低的预算进进Web市场,以是利用MySQL的公司的数目天天都在增添。开放源码社区已伸开双臂接待MySQL。有关这个功效壮大的数据库的文档非常丰厚,并且同时有Linux和Windows版本。
下载并安装MySQL(站长下载了mysq5.0.28)
使MySQL和Tomcat配合事情
使MySQL和Tomcat互相通讯大概有些坚苦。但是,经由过程利用JDBCAPI,我们将可以绝对简单地从Java类利用SQL与MySQL数据库通讯。
起首,要从这里下载驱动程序的符合的JAR文件。下载名为mysql-connector-java-5.0.0-beta.zip的文件。接上去,将文件解紧缩(unjar或unzip)至一个一时目次。最初,将包括驱动程序的文件从解紧缩的目次布局复制到WEBAPPS/BANNER/WEB-INF/lib目次中,然后从头启动Tomcat。在我们下载的驱动程序版本中,文件的称号是mysql-connector-java-5.0.0-beta-bin.jar
我们本可使用JDBC/ODBC桥驱动程序与MySQL通讯,但我们以为本机驱动程序在功能上有更年夜上风(只管我们没有运转任何基准测试程序来证明我们的假定)。关于这个使用程序,在功能上它大概不会有很年夜区分,但我们决意演示怎样利用本机JDBC驱动程序,以便您不用在计划较年夜的使用程序时才往懂得它。
转动横幅使用程序
既然我们已安装了一切的软件,就让我们来看一下这个使用程序可以做甚么和我们是怎样构造其架构和开辟它的。
本色上,您可使用我们的横幅servlet实行两个操纵。起首,您能够用它检察Web页面上的随机横幅图象,每次装进包括横幅告白的Web页面时,该随机横幅图象就会呈现。其次,您能够点击横幅图象,这将使您转至与装进的这个图象对应的链接。
依照HTML,其代码相似于:- <ahref="http://www.alixixi.com/program/a/...LinkForRandomImage..."><imgsrc="http://localhost:8080/banner/servlet/BannerServlet?type=image"/></a>
复制代码 当用type=link键值对换用servlet时,servlet抓取横幅的元数据并将用户从头路由至得当的URL。
代码和CLASSPATH设置
为了利用与本文一同供应的代码,您必需起首解紧缩这个zip文件,然后用命令行javac编译器或您喜好的IDE编译这些.java文件。要编译该代码,请设置CLASSPATH以包括这两个JAR文件(站长注:第二个就好了)。
- mysql-connector-java-5.0.0-beta-bin.jar
- servlet.jar(假如它没有和您利用的JDK打包在一同)
将已编译的.class文件复制到先前创立的[tomcat_installdir]webappsannerWEB-INFclasses目次中。必需将作为示例供应的图象文件和.htm文件放进[tomcat_installdir]webappsanner目次。
数据库设置
我们使用程序的数据库部分只是用来耐久存储体系中每一个横幅的元数据。换句话说,我们实践上其实不在数据库中存储图象文件,而只是存储指向每一个图象文件的援用。在我们的数据库中,我们将利用七个列来形貌每一个横幅告白。
表1中的形貌申明了每笔记录将包括的内容。我们实践大将在使用程序中只利用这七个数据库列中的五个。我们的版本中没有利用CustomerName和NumberOfClicksPurchased,但我们把它们作为占位符安排在这里以用于扩大。您能够很简单地扩大这个使用程序,并把它用于实际的贸易使用程序,个中客户为每一个横幅的点击次数付款。
<P>表1.数据库字段字段称号形貌示例ImageFile对横幅图象物理地位的援用/images/sitea.gifURL站点用户点击横幅以后,应从头路由他们的方针URLhttp://www.sitea.comCustomerName购置横幅的客户称号JohnDoeNumberOfClicksPurchased用户购置的点击次数140NumberOfClicksRemaining客户残剩的点击次数139NumberOfImpressions横幅已被显现的次数23BannerWeight正在显现的这一横幅的权重10
固然,在实际情况中,您会有一个以上的站点横幅。依据您的横幅“援助商”付出的金额与其他援助商的对照,您大概但愿较多地或较少地显现他的横幅。BannerWeight字段将被用来完成这一功效。我们已完成了一个十分复杂的加权体系,每一个要显现的横幅所具有的百分比几率为:- (BannerWeight/SumofallBannerWeights)*100
复制代码 将方才所说的内容转换成SQL,您可使用MySQLMonitor输出以下语句:- mysql>createdatabaseBANNER;
复制代码 要毗连到数据库,您能够输出: 接上去,我们创立表:- mysql>createtableADS(IMAGEFILEVARCHAR(50)NOTNULL,URLVARCHAR(50)NOTNULL,CUSTOMERNAMEVARCHAR(50),NUMBEROFCLICKSPURCHASEDINT(4),NUMBEROFCLICKSREMAININGINT(4)NOTNULL,NUMBEROFIMPRESSIONSINT(4)NOTNULL,BANNERWEIGHTINT(4)NOTNULL);
复制代码 ADS表的“describe”操纵相似于所示。
.ADS表
您必要用一些样本值来添补数据库以便断定所构建的数据库是不是准确。该项目标zip文件中包含一些样本横幅(GIF格局),可使用它们以懂得使用程序运转时的情形。固然,关于Web横幅URL,必要声明您决意安排横幅文件的地位。能够依照上面的SQL语法将横幅“注册”到数据库中:- mysql>insertintoADSvalues(/sitea.gif,http://www.cnn.com,JohnDoe,100,100,0,10);
复制代码 利用这一语法将表2中显现的纪录拔出到数据库中。
<P>表2.数据库纪录IMAGEFILEsitea.gifsiteb.gifsitec.gifsited.gifURLhttp://
www.cnn.comhttp://
www.news.comhttp://
www.ckuyun.comhttp://
www.yahoo.comCUSTOMERNAMEJohnDoeAlbertEinsteinJaneDoeMadonnaNUMBEROFCLICKSPURCHASED100203020NUMBEROFCLICKSREMAINING100203020NUMBEROFIMPRESSIONS0000BANNERWEIGHT10103010
注:Web横幅URL位于当地主机,仅供测试之用。在临盆情况中,URL会指向GIF文件的实践地位。该URL实践上能够是因特网上的任何地位。
既然我们有了数据库,就必要利用方才填进个中的数据。我们将用Javaservlet做到这一点。上面形貌Javaservlet代码,它将“推进”我们的勉力。您也许但愿花一些工夫来通读该项目zip文件中的BannerServlet.java代码。假如您以为坚苦,别忧虑;我们将花一些工夫注释代码是怎样事情的。
横幅系统布局
这个横幅告白servlet的系统布局非常复杂。我们将利用四个类:
- 通用的Logger类,一个将日记动静写到文本文件的类。
- 名为BannerServlet的servlet,每次显现横幅图象(即每次装进页面)和每次点击横幅图象时,将挪用它。该servlet是我们使用程序的中心。
- 通用的DBHandler类,BannerServlet将用它与MySQL数据库举行通讯。
- Banner类,我们用它来创立对象,这些对象包括数据库中每一个横幅所具有的一切元数据。
该BannerServlet类和Banner类特定于我们的使用程序。它们相称复杂,您能够便利地扩大它们来增加更庞大的特征。
DBHandler和Logger类的优点在于:您能够在任何您实践编写的、必要与数据库通讯或写进日记文件的使用程序中重用这两个类。
我们将更具体地会商一切这四个类,如许您就能够了解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的某个办法,以下所示:- publicBannergetBannerByName(Stringname){......dbHandler.setQueryString("SELECT*FROMADSWHERENAME=?");ResultSetrs=dbHandler.lookup(name);dbHandler.close();......}
复制代码 可使用lookup()办法来实行SELECT查询,利用executeUpdate()办法来实行UPDATE查询,和利用insert()办法来实行INSERT查询。另有一个execute()办法,它不必要参数,能够实行任何没有PrepareStatement参数的查询。
Banner类
Banner类只是一组间接对应于ADS数据库表中各列的值的setter和getter办法。
BannerServlet类
BannerServlet是我们这个使用程序的中心。我们将把该类分红几个分歧部分来向您解说。经由过程扫瞄代码,您将对怎样用DBHandler类毗连到数据库加倍熟习。
字段
BannerServlet利用五个字段:
- String_databaseUrl:要会见数据库的称号(jdbc:odbc:localhostBANNER)。
- String_driverName:用来与数据库通讯的驱动程序的称号。正如下面所形貌的那样,我们将利用MMMySQLJDBC驱动程序。该驱动程序的称号是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()利用一个复杂的算法从_bannersHashMap随机地选择一个横幅。increaseImpressions()和decreaseClicksRemaining()利用DBHandler毗连到数据库并更新给定Banner的信息。在这两个办法的停止部分,我们挪用init()办法将已更新的Banner信息从头装进到HashMap。
停止语
我们已创立一个使用程序,该使用程序演示了ApacheTomcat和MySQL互相之间怎样通讯,并向您供应了一个能为您处置年夜多半数据库事情的、十分有效的可重用工具。您能够以几种体例来扩大这个使用程序,这些已超越本文的局限。正如我们后面形貌的那样,您能够把这个使用程序扩大成一个体系,在这个体系中,您能够依据特定点击次数大概乃至是特定的显现次数向客户免费。能够很简单地用某个别的字段替换数据库中的CustomerName字段,这个字段能够是另外一个包括一切客户信息的表中的主键。
您能够扩大DBHandler类以处置数据库毗连适用。别的,能够将但愿用于使用程序的查询详细化成文本、特征或XML文件,从而同意扩大或变动查询界说而无需编写更多代码。
Java的B/s开发是通常是javaweb开发,又叫J2EE开发,J2SE是手机开发。C#的C/s和B/s开发是说.net和Asp开发。。u在这里说明一点;资深一点的Java和C#程序员都明白一点 |
|