大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 用Java Servlet构建旗帜广告系统

用Java Servlet构建旗帜广告系统

时间: 2021-07-31 作者:daque

对于一个商务网站来说,告白体例是必不行少的。一个好的告白体例是一个网站宁静收入的普通。而旗号告白(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(){ }      //读取摆设文献实质      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()))){         //即使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 {         //即使堕落,抛出一个servletexception缺点          super.init(servletconfig);          separator = system.getproperty("file.separator");//博得分割符          cfgs = new hashtable();//树立摆设变量          logs = new hashtable();//树立日记变量          system.out.println("? wayne zheng ");//屏幕输入我的邮箱地方         }      public void destroy()      {       }      public void dopost(httpservletrequest request, httpservletresponse response)             //发送post乞求       throws servletexception, ioexception        { doget(request, response); }       public void doget(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse) //读取get       throws servletexception, ioexception       {        string strconfig = httpservletrequest.getquerystring();        //读取乞求字符串        if(strconfig == null)//即使字符串为空         strconfig = "";//那么树立strconfig为空         if(strconfig.length() == 0)         //即使strconfig长度为零,那么表露缺点消息         {          errormessage("无摆设消息!", httpservletresponse);          return;         }         string strconfig1 = getfromquery(s, "config=");//同上         if(strconfig1.length() == 0){          strconfig1 = strconfig;          hashtable hashtable = getconfig(strconfig1);          if(hashtable == null)          {            errormessage("摆设消息缺点!", httpservletresponse);            return;          }          if(hashtable.get("dir") == null)          //即使哈希表中dir为空值,则输入缺点消息          {           errormessage("不许翻开数据目次", httpservletresponse);           return;          }        string strconfigmode2 = getfromquery(strconfig, "mode=");//读取摆设中的mode值        if(strconfigmode2.length() == 0){//即使没有mode值         strconfigmode2 = "1";//则设mode值为1         string strconfigid3 = getfromquery(strconfig, "id=");//读取摆设中的id值         if(strconfigid3.length() == 0){ file://即使没有id值           strconfigid3 = "1";//则设id值为1           httpsession httpsession = httpservletrequest.getsession(true);           if(strconfigmode2.equals("1"))           file://即使strconfigmode2的值为1,则表露banner告白           {            showbanner(hashtable, strconfigid3, httpsession, httpservletrequest, httpservletresponse);            return;            } else //要不转向banner所指的站点             {              gotosite(hashtable, strconfigid3, httpsession, httpservletrequest, httpservletresponse);              return;             }           }         private void gotosite(hashtable hashtable, string s, httpsession httpsession, httpservletrequest httpservletrequest, httpservletresponse httpservletresponse)//转向站点          throws ioexception //即使有任何缺点,抛出ioexception缺点          {           string sitename1;//设置站点卯           if(httpsession == null)//即使httpsession为空            {             sitename1 = getfirstsite(hashtable);//站点卯为哈希表中的第一个站点卯             }           else //要不            {             hashtable hashtable1 = (hashtable)httpsession.getvalue("旗号告白体例 ,wayne zheng");           if(hashtable1 == null){ //即使哈希表hashtable1为空值,则             sitename1 = getfirstsite(hashtable);// 站点卯为哈希表(hashtable)中的第一个站点卯           else             sitename1 = (string)hashtable1.get(s);           }          if(sitename1 == null)          //即使站点卯为空值则站点卯为默许值http://www.yesky.com          sitename1 = "http://www.yesky.com";          string s2;          if(hashtable.get("log") != null && (s2 = getfilebyurl(hashtable, s1)) != null){           writelog(hashtable, s2, sitename1, "c", httpservletrequest);           httpservletresponse.sendredirect(sitename1);           }      private void showbanner(hashtable hashtable, string s, httpsession httpsession, httpservletrequest httpservletrequest, httpservletresponse httpservletresponse)      throws ioexception      {       string s1 = (string)hashtable.get("dir");       file file = new file(s1);       vector vector;       if(file == null)        {         vector = new vector();        }       else        {         string as[] = file.list();         vector = getgraphfiles(as);        }       if(vector.size() == 0)        {         httpservletresponse.setcontenttype("text/html");         printwriter out = httpservletresponse.getwriter();         out.println("目次是空的!");         out.flush();           out.close();         return;        }       int i;       if(httpsession != null)        synchronized(hashtable.get("dir"))        {         integer integer;         int j;         if((integer = (integer)httpsession.getvalue("bi")) == null){          j = 0;         else          j = integer.intvalue();          if(j >= vector.size()) {          j = 0;           i = j;           if(++j >= 3){            j = 0;            httpsession.putvalue("bi", new integer(j));           }           else             i = 0;             string s2 = (string)vector.elementat(i);             string s3;             if(httpsession != null && (s3 = geturl(hashtable, s2)) != null)              {               hashtable hashtable1;               if((hashtable1 = (hashtable)httpsession.getvalue("旗号告白体例 ,wayne zheng")) == null){                hashtable1 = new hashtable();                hashtable1.put(s, s3);                httpsession.putvalue("旗号告白体例 ,wayne zheng", hashtable1);                }               if(hashtable.get("log") != null) {               writelog(hashtable, s2, "v", httpservletrequest);                outputbanner(s2, hashtable, httpservletresponse);                vector = null;                }      private void writelog(hashtable loghashtable, string logstring, string logstring1, string logstring2, httpservletrequest httpservletrequest)//写日记的因变量      {       string logstring3 = (string)hashtable.get("log");       string logstring4 = getlogstring(logstring, httpservletrequest) + " \"" + logstring1 + "\"";       gregoriancalendar gregoriancalendar = new gregoriancalendar();       //获得暂时的功夫       gregoriancalendar.settime(new date());       string logstring5 = logstring3 + stringdate(gregoriancalendar) + logstring2 + ".txt";//以功夫戳和“c”或“v”为文献名来写日记文献       savelog(hashtable, logstring5, logstring4);       }       private void writelog(hashtable loghashtable, string logstring, string logstring1, httpservletrequest httpservletrequest) file://写日记文献       {        string logstring2 = (string)loghashtable.get("log");        string logstring3 = getlogstring(logstring, httpservletrequest);        gregoriancalendar gregoriancalendar = new gregoriancalendar();        gregoriancalendar.settime(new date());        string logstring4 = logstring2 + stringdate(gregoriancalendar) + logstring1 + ".txt";        savelog(loghashtable, logstring4, logstring3);       }      private void savelog(hashtable hashtable, string s, string s1)//把日记文献生存在硬盘上       {         synchronized(hashtable.get("log"))        {         try          {           filewriter filewriter = new filewriter(s, true);           printwriter printwriter = new printwriter(filewriter);           printwriter.println(s1);           printwriter.flush();           printwriter.close();           filewriter.close();          }         catch(exception _ex) { }       }      }     private string getlogstring(string s, httpservletrequest httpservletrequest)     //博得日记字符串      {       string s1 = httpservletrequest.getremoteaddr();       //博得长途的考察者的ip地方       string s2 = httpservletrequest.getheader("user-agent");       string s3 = httpservletrequest.getheader("referer");       string s4 = "\"" + s + "\"";       if(s1 == null)        s1 = "-";        if(s2 == null)         s2 = "-";        else         s2 = "\"" + s2 + "\"";        if(s3 == null)         s3 = "-";        else         s3 = "\"" + s3 + "\"";        return s1 + " [" + new date() + "] " + s4 + " " + s3 + " " + s2;       }     private string stringdate(calendar calendar) //博得功夫戳      {        string s = string.valueof(calendar.get(1));        string s1 = string.valueof(calendar.get(2));        if(s1.length() == 1)          s1 = "0" + s1;          s = s + s1;          s1 = string.valueof(calendar.get(5));          if(s1.length() == 1)           s1 = "0" + s1;           return s + s1;         }      private string getfilebyurl(hashtable hashtable, string s)       {        for(enumeration enumeration = hashtable.keys(); enumeration.hasmoreelements();)         //hashtable的keys()本领归来了哈希表要害字的列举,enumeration的hasmoreelements()本领尝试列举重能否再有其余元素         {          string s1 = (string)enumeration.nextelement();          //让s1的值为enumeration的下一个元素值          if(s.equals(hashtable.get(s1)))//即使s的值为s1的值,则           return s1;//归来s1的值         }         return null;        }      private string getfirstsite(hashtable hashtable)//博得第一个站点的名字       {        string s = (string)hashtable.get("dir");        file file = new file(s);        if(file == null)          return null;          string as[] = file.list();          vector vector = getgraphfiles(as);          //树立vector向质变量来获得图形文献          if(vector.size() == 0)//即使没有图形文献,则归来空值            return null;          else            return geturl(hashtable, (string)vector.elementat(0));          }      private string geturl(hashtable hashtable, string s)//博得url       {         string s1 = s.tolowercase();//树立s1为s的小写情势         for(enumeration enumeration = hashtable.keys(); enumeration.hasmoreelements();)         {          string s2 = (string)enumeration.nextelement();          if(s1.equals(s2.tolowercase()))           return (string)hashtable.get(s2);         }        return null;      }     private void outputbanner(string s, hashtable hashtable, httpservletresponse httpservletresponse)//输入banner告白      throws ioexception//即使有错则抛出ioexception缺点      {       string s1 = (string)hashtable.get("dir") + s;       httpservletresponse.setheader("cache-control", "no-store");       httpservletresponse.setheader("pragma", "no-cache");       httpservletresponse.setdateheader("expires", 1l);       httpservletresponse.setcontenttype("image/" + s.substring(s.indexof(".") + 1));       javax.servlet.servletoutputstream servletoutputstream = httpservletresponse.getoutputstream();       dumpfile(s1, servletoutputstream);       servletoutputstream.flush();       servletoutputstream.close();       }      private boolean dumpfile(string s, outputstream outputstream)       {        byte abyte0[] = new byte[4096];        boolean flag = true;        try         {          fileinputstream fileinputstream = new fileinputstream(s);          int i;          while((i = fileinputstream.read(abyte0)) != -1)           outputstream.write(abyte0, 0, i);           fileinputstream.close();           }        catch(exception _ex)        {         flag = false;         }         return flag;       }      private vector getgraphfiles(string as[])//赢得图片文献       {         vector vector = new vector();         if(as == null)//即使as为空值,则归来vector中的值          return vector;          for(int i = 0; i < as.length; i++)//as.length为as[]数组长度         {          string s = as[i].touppercase();//树立图片文献文献名的每个字符为小写          if(isgraphfile(s))//即使为图片方法           vector.addelement(as[i]);//介入向量中          }          return vector;        }    private boolean isgraphfile(string stringfilename)      //确定文献能否为图形方法      {       int i = stringfilename.indexof(".");//       if(i <= 0 || i == stringfilename.length() - 1)        return false;        //确定文献能否以gif、jpg、jpeg或 png结果       string stringextendfilename1 = stringfilename.substring(i + 1);       return stringextendfilename1.equals("gif") || stringextendfilename1.equals("jpg") || stringextendfilename1.equals("jpeg") || stringextendfilename1.equals("png");      }     private void errormessage(string s, httpservletresponse httpservletresponse)      throws ioexception      {       httpservletresponse.setcontenttype("text/html");       printwriter out = httpservletresponse.getwriter();       out.println("");       out.println("");       out.println("");       out.println("");       out.println("");       out.println(" " + s + " ");       out.println("");       out.println("");       out.flush();       out.close();      }    private string getfromquery(string strquery, string strquery1)     {      if(strquery == null)       return "";       int i;       if((i = strquery.indexof(strquery1)) < 0)        return "";        string strquery2 = strquery.substring(i + strquery1.length());       if((i = strquery2.indexof("&")) < 0)         return strquery2;       else         return strquery2.substring(0, i);       }     public string getservletinfo()      {       return "旗号告白体例 ,wayne zheng";      }    private static final string cpr = "? wayne zheng ";    private static final string default_site = "www.yesky.com";    private static final string banner_session = "旗号告白体例 ,wayne zheng";    private static final string dir = "dir";    private static final string log = "log";    private static final string bannerindex = "bi";    private static final string edited = "edited";    private static final string view_postfix = "v";    private static final string click_postfix = "c";    private static final string config = "config";    private static final string mode = "mode";      private static final string id = "id";    private static final int buffer_size = 4096;    static string separator = "/";    private static hashtable cfgs;    private static hashtable logs;   }

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.