Servlet pokazujący postęp pracy.

0

Cześć.
Mam taki problem:
Mam sobie stronę jsp, wypełniam ją danymi, po czym klikam na przycisk i wywołuję nową stronę w nowy oknie przeglądarki.
W tej nowej stronie uruchomiany jest servlet, który wykonuje kilka czasochłonnych zadań - konkretnie chodzi o wykonanie 10 metod, jedna po drugiej, każda wykonuje inne zapytanie na bazie danych. I teraz chciałbym wyświetlić na tej stronie, coś w rodzaju pseudo-konsoli, żeby było widać postęp pracy:
NP.
Wykonuję zapytanie 1..... zakończono.
Wykonuję zapytanie 2..... zakończono.

Itp itd.

Proszę o pomoc.
Pozdrawiam.

0

Z JSP i serwletami na razie nie mam wielkiego doświadczenia (na Hello World się zakończyło:D), ale z tego co wiem, to przesyłana jest cała wiadomość na raz.
Musiałbyś pobawić się AJAXem, który dopisywałby do DIVów.

Co prawda to JSF, ale poznanie tego frameworka to chyba podstawa:
http://www.javaworld.com/javaworld/jw-09-2006/jw-0911-jsf.html

Przykład z samymi JSP i servletem dodającym:
http://www.hiteshagrawal.com/ajax/ajax-programming-with-jsp-and-servlets

Ten długi proces uruchom w osobnym procesie i klasę zarządzającą tym procesem wsadź do atrybutów sesji. AJAX by pobierał dane z servletu, który czekałby na zakończenie pracy, po czym zwróciłby tekst, że gotowe.

Moja wiedza na razie jest czysto teoretyczna, więc pewnie moja metoda nie jest najlepsza.

0

Cześć.
Problem polega na tym, że nie mogę użyć JSF.
JEstem ograniczony do Servletu i Ajaxa.

0

rozwiązanie jakie opisał Razi91 jest chyba najwygodniejsze. Ewentualnie "logi" możesz wyrzucić do pliku/bazy żeby nie śmiecić sesji, ale wtedy problemy z zapamiętaniem które logi dla którego usera.

0

Ok.
Rozwiązałem to w ten sposób:
Uruchamiam stronę jsp.
Na stronie piszę "Proszę czekać trwa reindeksacja dokumentów, może to potrwać kilka minut."
Jednocześnie onload uruchmiam skrypt ajaxowy, który wywołuje servlet.
Servlet wykonuje swoje czynności, po czym zwraca do strony kod html z informacją, że gotowe i button do zamknięcia.

Dzięki za pomoc.
BTW: zawsze mi się wydawało, że nie powinno się uruchomić w kontenerze JEE "zwykłego" wątku (klasa Thread), a ostatnio widuję kilka takich przykładów na sieci.
Co jest sprzeczne z moja dotychczasową wiedzą na temat serwerów aplikacyjnych.
Co wy na to?

0

@Black007, nie można, a nie da się :) Inne rozwiązanie to sprawdzenie AJAX Comet.

1 użytkowników online, w tym zalogowanych: 0, gości: 1