Java 有可能让web应用主动而不是被动吗?

Java 有可能让web应用主动而不是被动吗?,java,web-applications,Java,Web Applications,传统上,Web应用程序遵循请求/响应周期,用户或其他Web应用程序发出请求。然而,我很好奇,是否有可能使web应用程序在部署到应用程序服务器时自动启动某些任务。例如,假设我们有一个检索和处理数据的web应用程序。是否可以将此应用程序配置为在满足某些条件时自动检索和处理数据,而不需要用户/其他web应用程序的请求 是的,它正在使用任务调度器,例如cron。尽管有人可能会说,这样的任务不再是web应用程序,而是在服务器上运行的本地应用程序。是的,它使用了任务调度器,例如cron。尽管有人可能会说,这

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

是的,它正在使用任务调度器,例如cron。尽管有人可能会说,这样的任务不再是web应用程序,而是在服务器上运行的本地应用程序。

是的,它使用了任务调度器,例如cron。尽管有人可能会说,这样的任务不再是web应用程序,而是在服务器上运行的本地应用程序。

您可以将其包括在部署过程本身中。或者在部署过程中包含对网页的初始请求。

您可以将其包含在部署过程本身中。或者在部署过程中包含对网页的初始请求。

查看一下

查看一下

如果示例中的数据在文件中,那么您可以使用FileWatcher监视文件夹,并在新文件到达该文件夹时启动一些操作

下面是一个非常简单的例子,让您了解它的工作原理:

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);
  }
}

如果示例中的数据位于文件中,则可以使用FileWatcher监视文件夹,并在新文件到达该文件夹时启动一些操作

下面是一个非常简单的例子,让您了解它的工作原理:

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);
  }
}

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

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

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

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

我也会和克朗一起去。它可能只是现有webapp的一个补充。比如时不时地对webapps数据库做些什么。我对Java servlet容器不是很熟悉,它们可能有一些内置的调度功能。我也会选择cron。它可能只是现有webapp的一个补充。我不太熟悉Java servlet容器,可能它们有一些内置的调度功能。