Выполнить метод без блокировки клиента
Я использую Java для создания веб-приложения. Приложение должно загрузить форму, которая отправляет свои данные в jsp, который вызывает длинную бизнес-логику. Мне нужно, чтобы jsp вернул сообщение типа "спасибо за использование моего сервиса, по завершении процесса вам будет выслано письмо".
Проблема в том, что если я напишу что-то вроде:
<html>
<head></head>
<body>
...
<span>thank you for using my service, an email will sent to you when the proccess is done</span>
...
<% businessClass.doLongOperation(); %>
...
...
</Body>
</html>
JSP будет работать в течение длительного времени, и пользователь должен будет ждать завершения операции. Более того, если пользователь закроет браузер, я не уверен, что jsp продолжит свою работу.
Как я могу изолировать длинную операцию от jsp, чтобы пользователю не приходилось ждать все время выполнения, а также как сделать так, чтобы выполнение длинной операции не зависело от браузера?
Naor
1 ответ
Ваш JSP, вероятно, поддерживается на стороне сервера сервлетом или Struts Action или Spring MVC Controller.
В этом объекте выполните асинхронное выполнение:
executor.execute(new Runnable() {
public void run() { businessClass.doLongOperation(); }
});
Где executor
это пример java.util.concurrent.Executor
,