Если я правильно понимаю, о чем вы говорите, так это о возможности запустить задачу (которая займет некоторое время), а затем отвечать пользователю, пока эта задача все еще выполняет свои задачи.В зависимости от ваших требований это действительно довольно просто, и вы можете использовать простой старый поток Java для выполнения операции.
public class DoSillyCounting extends Thread {
private volatile int counter;
public int getCounter() { return counter; }
public run() {
while (counter < 10) {
counter ++;
try { Thread.sleep(1000); }
catch (InterruptedException ie) { }
}
}
}
На вашей странице настройки вы можете сделать это: (сессия - HttpSession)
DoSillyCounting doSillyCounting = new DoSillyCounting();
doSillyCounting.start();
session.putValue("tenSecondsCounter", doSillyCounting);
/* Here you can respond to the user while the Thread is executing */
И на своей странице статуса вы можете сделать следующее:
DoSillyCounting doSillyCounting =
(DoSillyCounting)session.getValue("tenSecondsCounter");
out.print(Integer.toString(doSillyCounting.getCounter());
if (doSillyCounting.isAlive()) {
out.print("Still Working on it");
} else {
out.print("Yippee, I finished");
}
Конечно, это довольно бесполезный пример, и эта модель не очень хорошая идея, когда у вас может быть большое количествозапросы на удовлетворение, тогда стоило бы взглянуть на реализацию ThreadPool или использовать что-то вроде JMS.