是否有可能使Web应用程序具有主动性而不是被动反应?

时间:2011-01-10 17:30:18

标签: java web-applications

Web应用程序传统上遵循请求/响应周期,其中请求由用户或其他Web应用程序发出。但是,我很好奇是否有可能使Web应用程序在部署到应用服务器时自动启动某些任务。例如,假设我们有一个检索和处理数据的Web应用程序。是否可以将此应用程序配置为在满足特定条件时自动检索和处理数据,而不是需要来自用户/其他Web应用程序的请求?

5 个答案:

答案 0 :(得分:2)

是的,它正在使用像cron这样的任务调度程序。虽然有人可能会说,这些任务不再是Web应用程序,而是服务器上的本地应用程序。

答案 1 :(得分:1)

答案 2 :(得分:1)

如果示例中的数据位于文件中,那么您可以使用 FileWatcher 来监控文件夹,并在新文件登陆时启动一些操作。

这是一个非常简单的example,只是为了让您了解它的工作原理:

package pilrcedit;

import java.io.*;
import java.util.*;

public class FileWatcher implements ChangeListener
{
  private static final int FILE_MODIFIED=MODIFIED;

  Hashtable files=new Hashtable();
  ChangeListeners listeners=new ChangeListeners();

  public FileWatcher()
  {
    Preferences.addChangeListener(this);
  }

  public void objectChanged(Object source,int id,Object data)
  {
    checkFiles();
  }

  private void checkFiles()
  {
    for(Enumeration e=files.keys();e.hasMoreElements();)
    {
      File f=(File)e.nextElement();
      if (f.lastModified()!=((Long)files.get(f)).longValue())
      {
        files.put(f,new Long(f.lastModified()));
        notifyListeners(f);
      }
    }
  }

  public void addFile(File f,ChangeListener listener)
  {
    files.put(f,new Long(f.lastModified()));
    listeners.add(f,listener);
  }

  public void removeFile(File f,ChangeListener listener)
  {
    listeners.remove(f,listener);
  }

  public void notifyListeners(File f)
  {
    listeners.fireObjectChanged(f,this,FILE_MODIFIED,f);
  }
}

答案 3 :(得分:0)

您可以在部署过程中包含它。或者在部署过程中将该初始请求包含在网页中。

答案 4 :(得分:0)

由于您提到您希望在部署期间执行某些操作,我认为您可以在此处使用spring来执行某些任务或在部署期间在内存(缓存)中加载某些内容。例如,在应用程序上下文xml中,您可以这样: -

<bean id="someCache" class="com.my.company.MyCache"
          init-method="load">
  <!-- <property> as needed -->     
</bean>

MyCache类可能如下所示: -

class MyCache{
        public void load() {
             //do your deployment work
    }
}