WAP联盟统计数据定时任务的实现

功能介绍 当一个WAP网站加入WAP联盟之后,该网站必须在每天5点之前把从WAP联盟过来的访问量以及下载量发送给WAP联盟,以跟站长结算.

功能实现原理

在网站起一个定时任务,在每天的4点钟定时发送网站数据给WAP联盟,以便统计结算.

具体代码

 网站是采用spring+structs+hibernate架构

在网站启动之前 必须运行定时任务,因此我们采用在WEB.XML中配置一个ServletContextListener方法,这样在网站启动之前,调用ServletContextListener的初始化方法来启动定时任务.

在web.xml中配置

 <listener>
        <listener-class>
           TimerListener
        </listener-class>
    </listener>

 

TimerListener 的实现如下 它实现每隔一小时启动adverseTask 任务的功能

 public class TimerListener implements ServletContextListener {

 private java.util.Timer timer = null;
 private AdverseTask adverseTask;
 public void contextDestroyed(ServletContextEvent arg0) {
  // TODO Auto-generated method stub
  timer.cancel();
  
 }

 public void contextInitialized(ServletContextEvent arg0) {
  // TODO Auto-generated method stub
  timer = new java.util.Timer(true);
  adverseTask = new AdverseTask(arg0.getServletContext());  
  timer.schedule(adverseTask, (long)0, (long)60 * 60 * 1000);
  
 }

}

adverseTask 为一个定时任务,它主要实现在每天的四点定时统计前一天WAP联盟的访问量和下栽量,并通过HTTP协议发送给WAP联盟,它的实现如下

 

public class AdverseTask extends java.util.TimerTask{
  private ServletContext context;
  private static boolean isRunning = false;
  private static boolean flag = true;
  private static final int C_SCHEDULE_HOUR = 4;
 
  private IAdverseInfo adverseinfo;
 
  public void setAdverseinfo(IAdverseInfo info)
  {
   this.adverseinfo=info;
  }
 
  public IAdverseInfo getAdverseinfo()
  {
   return this.adverseinfo;
  }
 
  public AdverseTask()
  {
  
  }
 
  public AdverseTask(ServletContext context)
  {
   this.context = context;
  }
 
  public void run()
  {
  
   Calendar cal = Calendar.getInstance();
  
  
   if (!isRunning)
   {
    if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY) && flag)
    {
     isRunning = true;
    
    
    
    String path= context.getRealPath("/")+"WEB-INF"+"/";
    
   
    
     List list=null;
     ApplicationContext factory1 = new FileSystemXmlApplicationContext(path+"applicationContext.xml");//
    
    
    
     adverseinfo=(IAdverseInfo)factory1.getBean("adverseinfotmpl");
     try
     {
      list=this.adverseinfo.QueryAdverseInfo("4.0.0.0");
     
          
    
     if((list!=null)&&(list.size()>0))
     {
      StringBuffer sb=new StringBuffer();
      Iterator it=list.iterator();
      AdveresinfoT info;
     
      while(it.hasNext())
      {
       info=(AdveresinfoT)it.next();
       String channelid="4.0.0.0";
       String aid=String.valueOf(info.getAid());
       String pid=String.valueOf(info.getPid());
       String faid=String.valueOf(info.getFaid());
       String fpid=String.valueOf(info.getFpid());
      // Date date=info.getComedate();
       StringBuffer date_str=new StringBuffer();
      
       Calendar tempcal= Calendar.getInstance();
             tempcal.add(Calendar.DATE, -1);
             Date startdate = new Date(tempcal.getTime().getTime());
            
       java.text.SimpleDateFormat sf =new java.text.SimpleDateFormat("yyyy-MM-dd");
      
       String str_date=null;
       str_date= sf.format(startdate);      
      
      
      
      
      
       int count=this.adverseinfo.QueryAdverseInfoByCondition(channelid, aid, pid, faid, fpid);//查询前天的统计量
       int downtime=this.adverseinfo.QueryDownTimeByCondition(channelid, aid, pid, faid, fpid);//查询前天的下栽量
      
      
      
       sb.append(aid);
       sb.append(",");
       sb.append(pid);
       sb.append(",");
       sb.append("0");
       sb.append(",");
       sb.append(count);
       sb.append(",");
       sb.append(downtime);
       sb.append(",");
       sb.append("0");
       sb.append(",");      
       sb.append(str_date);
       sb.append(",");
       sb.append(faid);
       sb.append(",");
       sb.append(fpid);
       sb.append("|");
      
      
      
      
      
      }
     
     
      URL url=null;
      OutputStream out=null;
      HttpURLConnection urlconnect=null;
      InputStream in=null;
      byte[] content=null;
      content=sb.toString().getBytes();
     
      System.out.println("content"+content);
     
      try
      {
       url=new URL("http://sync.cn/sync");//WAP联盟的HTTP接口
       urlconnect=(HttpURLConnection)url.openConnection();
       urlconnect.setRequestMethod("POST");
       urlconnect.setDoOutput(true);
       urlconnect.setRequestProperty("Content-Type", "text/plain");
       urlconnect.setRequestProperty("Content-Length", Integer
        .toString(content.length));

       out=urlconnect.getOutputStream();
       out.write(content);
       out.flush();//发送数据
      
       System.out.println("request"+urlconnect.getResponseCode());//得到响应结果
      
       in=urlconnect.getInputStream();//得到WAP联盟的应答数据
       byte[] inputcontent=new byte[100];
       String receive=null;
       int length=-1;
       while((length=in.read(inputcontent))!=-1)
       {
        receive+=new String(inputcontent,0,length);
       }
       System.out.println("receive"+receive);
      }
      catch(Exception e)
      {
       e.printStackTrace();
      }
      finally
      {
       try
       {
        if(urlconnect!=null)
        {
         urlconnect.disconnect();
        }
       
        if(out!=null)
        {
         out.close();
        }
        if(in!=null)
        {
         in.close();
        }
       }
       catch( Exception e)
       {
       
       }
      }
     
     
     }
    
     }
     catch(DaoException e)
     {
     
     }
    
     isRunning = false;
     flag = false;
    
    }
   }
   else
   {
   
   }
   if(C_SCHEDULE_HOUR != cal.get(Calendar.HOUR_OF_DAY))
   {
    flag = true;
   }
  }
 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值