Ladeseite anzeigen lassen während das Servlet noch arbeitet?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi Leute,

ich habe folgendes Problem:
Mein Servlet wird von einer JSP aufgerufen. Das Servlet führt einen Prozess aus, der mehrere Sekunden dauern kann. Nun möchte ich eine Ladeseite anzeigen lassen (einfache HTML-Seite), bis der Prozess beendet ist. Wenn der Prozess beendet ist, soll das Servlet an eine andere JSP weiterleiten.

Hat jemand eine Idee wie sich das geschickt umsetzen lässt?

Danke schonmal! :)

Gruß Nova
 

HaBaLeS

Aktives Mitglied
Ich kann mir da zwei Möglichkeiten vorstellen die aber auf dem gleichen prinzip basieren.

1. Request kommt an Servlet_1
2. Servlet_1 startet die Berechnung im Hintergrund und liefert eine Seite aus die ....
3. eine Meldung "Bitte warten" anzeigt. diese Seite hat im Header ein refirect auf Servlet_2
4. Servlet 2 Checkt ob die Daten berechnet sind. Wenn nicht weiter bei Schritt 3. Sind die Daten bereit, können die ergebnisse ausgeliefert werden.

Das kannst du nun auch mit AJAX machen dann kannst du das ganze etwas schöner aufbereiten, aber prinzipiell funktioniert es genaus:
1. Berechnung im Hintergrund
2. Status abfragem
3. Wenn fertig ausliefern



Grüße
HaBaLeS
 
G

Guest

Gast
Hm, also momentan komm ich überhaupt nicht weiter.
Ich habe auch noch ein Problem damit eine Seite anzuzeigen und gleichzeitig den Prozess im Hintergrund abarbeiten zu lassen. Egal ob ich die Seite vor oder nach dem Prozess generieren lasse, die Seite ist immer erst sichtbar nachdem der Prozess durchgelaufen ist.
Wie macht man das denn idealerweise? Startet man den Prozess in einem neuen Thread (Runnable) oder wie? Und wenn ja, wie soll dann geprüft werden wann der Prozess zuende gelaufen ist, weil eine Schleife im Servlet oder in der JSP würde dann ja auch wieder den Seitenaufbau "blockieren"...

Danke schonmal.

Gruß Nova
 

HaBaLeS

Aktives Mitglied
ja du musst mit Threads arbeiten. Am besten baust du dir einen backroundthread, der anfragen dieser art bearbeiten kann. Dazu noch eine queue in die du die ganzen requests reinpackst, damit sie sequenziell abgearbeitet werden.
 
G

Guest

Gast
Hm, aber an irgendeiner Stelle muss ich die Threads dann ja auch wieder joinen. Und wenn ich die Threads dann joine, hängt die Seite an der Stelle doch wieder, weil die JSP dann erst vollständig aufgebaut wird, sobald die Threads gejoined sind... Oder wie soll ich das machen?

Gruß Nova
 

HaBaLeS

Aktives Mitglied
Was meinst du mit Thread Joinen? Einfach einen Thread starten der im Hintergurnd eine Queue abarbeitet. An diese Queue gibst du nen Job, und desn status von dem Job kannste dann in servlet2 abfragem wenn der job erledigt ist ergebniss anzeigen
 

Novanic

Bekanntes Mitglied
Hi,

also ich hatte mir jetzt das hier überlegt. Theoretisch sollte das ja klappen, aber leider funktioniert die Weiterleitung (theDispatcher.forward(...)) nicht. Wie krieg ich das denn funktionsfähig? :)

Code:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Loading...</title>
    </head>
    <body bgcolor=#000000>
    <%
        final HttpServletRequest theRequest = request;
        final HttpServletResponse theResponse = response;
        final Thread theJobThread = (Thread)theRequest.getAttribute("jobthread");

        Thread theWaitingThread = new Thread(new Runnable()
        {
            public void run() {
                try {
                    theJobThread.join(); //waiting...
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                RequestDispatcher theDispatcher = theRequest.getRequestDispatcher("next.jsp");
                try {
                    theDispatcher.forward(theRequest, theResponse);
                } catch (ServletException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        theWaitingThread.start();
    %>
    </body>
</html>

Danke schonmal! :)

Gruß Nova
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JSF Bestimmte Daten aus der Datenbank anzeigen lassen Allgemeines EE 13
N PDF anzeigen lassen Allgemeines EE 5
M JSF Nur bestimmten Rollen bestimmte Inhalte anzeigen... Allgemeines EE 2
D Bild erstellen und anzeigen lassen Allgemeines EE 4
A Unsauberer Code.. (Properties-Objekt in JSP anzeigen) Allgemeines EE 5
H Servlet - Zwischenmeldung anzeigen bei längerer Berechnung Allgemeines EE 2
M JSF Komponenten wahlweise anzeigen? Allgemeines EE 4
D Datenselektion anzeigen Allgemeines EE 3
G Struts: ActionMessage value in JSP anzeigen Allgemeines EE 2
K Struts - FormBean mit 2 Listen - Anzeigen und Speichern Allgemeines EE 2
O Anzeigen mehrerer columns in einer DataTable Allgemeines EE 4
M PDF im neuen Browserfenster auf Client-Rechner anzeigen Allgemeines EE 5
M Tomcat - Bei allen Exceptions einheitliche Seite anzeigen ? Allgemeines EE 3
G Values aus DB in Input-Feldern anzeigen (Struts) Allgemeines EE 2
L nicht alle eintraege anzeigen lassen Allgemeines EE 3
P JFreechart objekt in JSP anzeigen Allgemeines EE 12
S Servlet: Verz. anzeigen lassen? Allgemeines EE 2
A DB-Tabelle in Servlet einlesen und in JSP anzeigen Allgemeines EE 9
U jpg objekt mit jsp anzeigen Allgemeines EE 3
A Binärdatei vom Servlet erzeugen lassen Allgemeines EE 3
T "normales" Java Programm auf einen Server laufen lassen Allgemeines EE 3
P CXF Project auf Tomcat laufen lassen - wie? Allgemeines EE 35
M Daten aus JavascriptSeite von Java auswerten lassen Allgemeines EE 3
C Automatisiertes Bild erzeugen lassen. Allgemeines EE 7
R Zeichenkette als JSP-Fragment auswerten lassen Allgemeines EE 4
F Timer in einem Applicationserver laufen lassen? Allgemeines EE 4
S webservice mit tomcat und axis ohne eclipse laufen lassen? Allgemeines EE 2
K war-Archiv unter Tomcat neu entpacken lassen Allgemeines EE 3
G Servlet wollen sich nich ansprechen lassen Allgemeines EE 4

Ähnliche Java Themen

Neue Themen


Oben