点击这里给我发消息 点击这里给我发消息

用Java Servlet构建旗帜广告系统 

添加时间:2013-12-7
    相关阅读: 商务网站 商务网站 网页 开发 页面 程序 HTML

  对于一个商务网站来说,广告系统是必不可少的。一个好的广告系统是一个网站稳定收入的基础。而旗帜广告(banner)则是网站广告中占绝大部分的广告,因此开发一个旗帜广告系统就非常重要了。利用Java Servlet 我们可以很轻松的构建属于我们自己的旗帜广告系统。
  我们一般在网页上放上一些图片,设置它们的链接指向广告客户的网页,然后产生日志文件存放浏览的人数,浏览者的IP等信息,这就是开发旗帜广告系统的一般思路。
  下面,我想结合一个例程来介绍一下如何使用Java Servlet来构建旗帜广告系统。这下面这个例子中,你必须使用在你的HTML文件中使用<IMG> 标签。
  用法有三种是:
  1) Banner?config_file 或Banner?config=config_file
  例如:
  <IMG height=125 src="http://localhost/servlet/Banner?config_file" width=125>
  用这种方法你就可以显示不同的图片了。
  2) 你也可以为每一幅图片设置自己的重定向URL。只需在你的设置中添加文件描述,见下面的例子,Servlet也需要更多的描述参数:
  <IMG height=60 src="http://localhost/servlet/Banner?config=config_file&mode=1" width=468>
  这样你就可以支持标准的旗帜广告了。
  3)你也可以在同一个页面上有多个旗帜广告。你只需要在参数中加入“id=某个整数值”就可以了。这个值必须是一个你的页面内唯一的整数值!例如,对于第一个banner的描述为:
  <IMG height=60 src="http://localhost/servlet/Banner?config=config_file&mode=1&id=1" width=468>
  第二个为:
  <IMG height=125 src="http://localhost/servlet/Banner?config=config_file&mode=1&id=2" width=125>
  有的朋友会问了,config_file是什么文件呀? 它是一个文本文件,用来描述Servlet的设置信息。你能在你的主机的任何地方保存这个文件。现把参数介绍一下,这个配置文件有三个参数:分别为
  1、dir=some_directory
  解释: dir是你的旗帜广告文件存放的目录,可以使用的图片格式有JPG ,GIF,PNG ,JPEG等。这个参数是必须有的,否则系统会报错。
  2、bannerfilename=some_url
  解释: banner文件使用下面的格式,例如:
  banner.gif=http://www.yesky.com/
  banner.jpg=http://www.yesky.com/
  3、log=some_directory_to_store_log_file
  解释:存放日志文件的目录,可以是服务器上的任何目录。
  附录1、日志文件(log file)及格式
  
    Banner 系统每天会自动产生两个日志文件。分别为ddmmyyyyv.txt和ddmmyyyyc.txt 。第一个文件保存浏览banner的记录,第二个文件保存重定向的记录。两个文件都是文本文件,每一行包括一条记录。纪录格式是:
  
    IP地址 日期 图片文件 用户代理 重定向记录 (只用于 *c.txt文件) ,字段之间用空格隔开。
  
  
  附录2、Banner.java源程序:
  
    import java.io.*;
  
    import java.util.*;
  
    import javax.servlet.*;
  
    import javax.servlet.http.*;
  
    public class Banner extends HttpServlet
  
     {
  
      public Banner(){ }
  
      file://读取配置文件内容
  
      private boolean readConfig(String sConfig, Hashtable hashtable)
  
      {
  
       try
  
        {
  
         BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(new FileInputStream(sConfig)));// 设置缓冲区读入一个配置文件
  
         String sLineInformation1;//
  
         while((sLineInformation1 = bufferedreader.readLine()) != null)
  
         {
  
          sLineInformation1 = sLineInformation1.trim();//去除字符串中的空格
  
          if(sLineInformation1.length() > 0)//如果字符串sLineInformation1的长度大于零 {
  
           int i = sLineInformation1.indexOf("=");
  
           if(i > 0 && i < sLineInformation1.length() - 1 && sLineInformation1.charAt(0) != '#' && !sLineInformation1.startsWith("//"))//配置文件的每一行参数必须以不为#或//开头的字符串
  
            hashtable.put(sLineInformation1.substring(0, i).trim().toLowerCase(), sLineInformation1.substring(i + 1).trim());
  
            }
  
           }
  
          bufferedreader.close();
  
          File file = new File(sConfig);//创建一个配置文件
  
          hashtable.put("edited", String.valueOf(file.lastModified()));
  
          }
  
         catch(Exception _ex)
  
         {
  
          return false;
  
         }
  
        String sDirInfo2 = (String)hashtable.get("dir");//取得目录参数
  
        if(sDirInfo2 != null)//如果目录参数是空值
  
         {
  
          if(!sDirInfo2.endsWith(separator))//如果sDirInfo2不是以分隔符结尾,那么
  
          {
  
           sDirInfo2 = sDirInfo2 + separator;//给sDirInfo2加上分隔符
  
           hashtable.remove("dir");//移去哈希表变量中的dir
  
           hashtable.put("dir", sDirInfo2);
  
          }
  
        File file1 = new File(sDirInfo2);
  
        String as[] = file1.list();
  
        if(as == null) {
  
         hashtable.remove("dir");
  
         }
  
        sDirInfo2 = (String)hashtable.get("log");
  
        if(sDirInfo2 != null)
  
         {
  
          if(!sDirInfo2.endsWith(separator))
  
           {
  
            sDirInfo2 = sDirInfo2 + separator;
  
            hashtable.remove("log");
  
            hashtable.put("log", sDirInfo2);
  
           }
  
        File file2 = new File(sDirInfo2);
  
        String as1[] = file2.list();
  
        if(as1 == null) {
  
         hashtable.remove("log");
  
         }
  
        return true;
  
       }
  
      private Hashtable getConfig(String s)//取得配置
  
       {
  
        Hashtable hashtable = (Hashtable)cfgs.get(s);
  
        if(hashtable != null)//如果配置不为空
  
        try
  
         {
  
          String s1 = (String)hashtable.get("edited");
  
          File file = new File(s);
  
          if(!s1.equals(String.valueOf(file.lastModified()))){
  
          file://如果s1的值不等于文件最后一次修改的值,则hashtable的内容为空值
  
           hashtable = null;
  
           }
  
          catch(Exception _ex)//捕获Exception _ex错误
  
           {
  
            hashtable = null;
  
           }
  
          if(hashtable != null)
  
           return hashtable;
  
           hashtable = new Hashtable();
  
          if(!readConfig(s, hashtable))
  
           {
  
            return null;
  
           }
  
          else
  
           {
  
            cfgs.put(s, hashtable);
  
            return hashtable;
  
           }
  
          }
  
  
       public void init(ServletConfig servletconfig)//初始化配置参数
  
        throws ServletException {
  
          file://如果出错,抛出一个ServletException错误
  
           super.init(servletconfig);
  
           separator = System.
咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册