To na pewno może być zrobione. Chcesz przejrzeć Asynchronous programming with HTTP w dokumentacji, wyjaśnia, jak to zrobić w sposób nieblokujący. Będziesz potrzebował trochę javascript do przekierowania części.
Nie wiem, co masz na myśli, mówiąc o "komendzie systemowej", ale prawdopodobnie chcesz, aby to było create a job, aby można było wywołać ją za pomocą żądania. Następnie możesz poll it, aż zakończy się, a następnie przekierować użytkownika. Ale naprawdę dokumentacja robi nieskończenie lepszą robotę przy wyjaśnianiu tego, co teraz robię.
Oto przykład działania kontrolera, w którym zakładam, że polecenie systemowe zwraca pewien rodzaj wyjścia String dla użytkownika. Kiedy zadanie zostanie zakończone, wyśle odpowiedź do użytkownika, uruchamiając procedurę obsługi sukcesu w przykładzie javascript.
public static void executeSystemCommand(String input) {
Promise<String> outputPromise = new SystemCommandJob(input).now();
String output = await(outputPromise);
renderText(output);
}
Zasadniczo jeśli używasz jQuery $.ajax
można użyć pełną zdarzenie odpytywanie danych (wystarczy zrobić wniosek ponownie, jeśli to się nie udało w czasie Timeout) i wykorzystać sukces /Wykonaj zdarzenie, aby przekierować użytkownika, gdy aplikacja odpowie, aby wskazać, że uruchomiono "polecenie systemowe".
Przykład funkcji można użyć:
function poll(){
$.ajax({
url: "/systemcommand",
success: function(data){
// redirect to next page here
document.location.href = '/output'
},
complete: poll,
timeout: 20000
});
};
Istnieje również a great example on long polling w JavaScript w StackOverflow.