Это, безусловно, может быть сделано. Вы хотите посмотреть Asynchronous programming with HTTP в документации, в нем объясняется, как это сделать неблокируемым способом. Тем не менее, вам понадобится немного javascript для перенаправляющей части.
И я не знаю, что вы имеете в виду под «системной командой», но вы, вероятно, захотите сделать это create a job, чтобы вы могли вызвать его с запросом. Вы можете затем poll it, пока он не будет закончен, а затем перенаправляет пользователя. Но на самом деле документация делает бесконечно лучшую работу, объясняя это, и теперь я это делаю.
Вот пример действия контроллера, где я предполагаю, что ваша системная команда возвращает какой-то вывод строки для пользователя. Когда задание будет завершено, он отправит ответ пользователю, тем самым инициируя обработчик успеха в примере javascript.
public static void executeSystemCommand(String input) {
Promise<String> outputPromise = new SystemCommandJob(input).now();
String output = await(outputPromise);
renderText(output);
}
В принципе, если вы используете JQuery-х $.ajax
вы можете использовать полное событие для опроса данных (просто сделать запрос снова, если это так и не удалось в течение времени тайм-аута) и использовать успех/done event, чтобы перенаправить пользователя, когда приложение отвечает, чтобы указать, что «системная команда» выполнена.
Пример функции вы можете использовать:
function poll(){
$.ajax({
url: "/systemcommand",
success: function(data){
// redirect to next page here
document.location.href = '/output'
},
complete: poll,
timeout: 20000
});
};
Существует также a great example on long polling в JavaScript на StackOverflow.