2015-03-05 3 views
0

Я работаю над проектом, где мы используем Tomcat 8 в качестве сервера приложений и, следовательно, JSP и Servlets. Каждый JSP отображает вид списка проектов. Пользователь приложения имеет возможность имитировать проект. Это не так важно. Когда пользователь нажимает «simulate' кнопки, следующий процесс будет выполняться:Сервлет связи с jsp без запроса клиента

  1. Via Ajax (JavaScript) сервлет будет выполнен, который производит почтовый файл и сохраняет файл на жестком диске сервера
  2. В базе данных для соответствующего проекта будет установлен флаг 'simulation'.
  3. внешняя программа java (на бэкэнд) прослушивает флаг 'simulation', и если установлен флаг для проекта, внешняя программа захватывает zip-файл, хранящийся в веб-приложении
  4. внешняя программа Java запускает симуляцию для этого проекта.
  5. При моделировании внешняя программа java хранит новый zip-файл на жестком диске сервера, устанавливает флаг «hey, I'm ready» в базе данных и вызывает сервлет веб-приложения
  6. этого сервлет сохраняет информацию о данных в новом почтового файла в базу данных
  7. закончить

Так что мой вопрос: что это лучший способ, чтобы сообщить JSP, что моделирование делается? JSP по-прежнему показывает, что проект находится в процессе моделирования. Моя текущая идея такова:

Я мог периодически отправлять запрос Ajax на сервер, чтобы проверить базу данных для флага «hey I'm ready», и если он установлен, я могу отобразить результат на JSP , Но у меня такое ощущение, что есть более разумные решения.

Возможно, я мог бы использовать последний вызов сервлета (см. Пункт 5), чтобы как-то сообщить JSP, что симуляция выполнена? Проблема в том, что этот сервлет не вызывается клиентом, а внешней программой java.

Есть ли у вас какие-либо предложения? Или есть какая-то технология, о которой я должен прочитать?

спасибо.

ответ

0

Использование асинхронных вызовов ajax означает, что функция вернется, когда сервлет завершит работу и вернет код HTTP (200 для успеха).

поэтому этот пример:

$.ajax({ 
        url: Config.serverUrl+'/simulationServlet', 
        type: 'GET', 

        success: function(result) { 
          $('#infoBox').text("simulation is over"); 
         } 
       }); 

покажет, что моделирование выполняется.

+0

Спасибо за ваш ответ. Но проблема в том, что у меня есть два вызова сервлета. Первый на этапе 2. Второй и шаг 5. Первый сервлет вызывается клиентом, который использует веб-приложение. Первый сервлет просто устанавливает флаг в базе данных и возвращает «успех» клиенту. Но второй сервлет вызывается внешней java-программой (которая находится на сервере). Мне нужно как-то узнать, когда второй сервлет сделан. – David

+0

это должен быть цепной вызов, потому что логика приложения не в порядке. подумайте об этом так. так как вы хотите выполнить задание, вам нужно нажать сервлет и позволить ему делать все, что захочет, и вернуться, когда закончится работа. назовем его «Фасад», например. Сервлет может вызывать другие сервлеты и т. Д. Существует еще один шаблон программирования publish/subscribe, который вы можете использовать, но вам нужно настроить множество материалов для push-уведомлений для клиентского приложения. – arisalexis

Смежные вопросы