# Servlet - Zwischenmeldung anzeigen bei längerer Berechnung



## Henry (27. Dez 2007)

Hallo Leute,

ich habe ein Servlet, das eine etwas längere Anfrage an einem Server durchführt und dann ein Resultat in Form eines Strings zurückbekommt (Ist eine HTML Seite, die dann angezeigt werden soll). 
Mein Problem ist nun, das ich in der Zwischenzeit etwas anzeigen möchte in Form von "Bitte warten Sie".

Ich habe schon versucht 2x zu flushen, nur bleibt leider dann die Meldung "Bitte warten Sie" noch in der Resultat Seite bestehen.

Weiß zufällig jemand wie man das lösen könnte?

Nachfolgend der Code von meinen jetztigen Servlet. Ich flush im Moment nur 1x, so dass keine "Bitte warten Sie" - Meldung angezeigt wird.

Vielen Dank schonmal!


```
package de.userinterface.httpclient;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

/**
 * Dieses Servlet dient dazu einen Postrequest an des DBSModellServlet zu senden, um die Daten der Nutzergruppe LAY zum Modell zu übertragen.
 *
 */
public class ClientPostServlet extends HttpServlet 
{
  
 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException 
 {
    HttpClient httpClient = new HttpClient();
    //Url für den PostRequest setzen (kommt aus LoginWorkflow.xml Datei bei SCIENTIST)
    String url = String.valueOf(request.getAttribute("viewUri"));
    PostMethod postMethod = new PostMethod
    (
    	url
    );
    
    //Attribute aus dem Request rausholen und als NameValuePair für den späteren Post Request setzen
    ArrayList<NameValuePair> postData = new ArrayList<NameValuePair>();
    Enumeration requestAttributeNames = request.getAttributeNames();
    while (requestAttributeNames.hasMoreElements()) 
    {
         String requestAttributeName = (String) requestAttributeNames.nextElement();
         String attribut = String.valueOf(request.getAttribute(requestAttributeName));
         postData.add(new NameValuePair(requestAttributeName, attribut));
         //Attribute sicherheitshalber aus dem Request entfernen
         request.removeAttribute(requestAttributeName);
    }
    
    //ArrayList in Array übertragen
    NameValuePair[] postDataArray = new NameValuePair[postData.size()];
    for (int i = 0; i < postDataArray.length; i++) 
    {
		postDataArray[i] = postData.get(i);
	}
                    
	//the 2.0 beta1 version has a PostMethod.setRequestBody(NameValuePair[])
	//method, as addParameters is deprecated
    //postMethod.addParameters(postDataArray);
    //Attribute in den Post Request setzen
    postMethod.setRequestBody(postDataArray);
    //Post Request senden
    httpClient.executeMethod(postMethod);
    
    //Ergebnis verarbeiten
    BufferedReader in = new BufferedReader(new InputStreamReader(postMethod.getResponseBodyAsStream()));
    String zeile = "";
    StringBuffer ergebnis = new StringBuffer();
    while ((zeile = in.readLine()) != null) 
    {
    	ergebnis.append(zeile);
    }
	//release the connection used by the method
    postMethod.releaseConnection();
    
    //String Buffer in String umwandeln
    String ergebnisString = ergebnis.toString();
    
    //css-Datei Position verändern
    ergebnisString = ergebnisString.replaceFirst("AnzeigeModell/css/layout.css", "../css/layout.css");

    //display the response to the POST method
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.print(ergebnisString);
    out.flush();
    
  } 
  
  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, java.io.IOException {

    doPost(request,response);
  }
}
```


----------



## Kim Stebel (27. Dez 2007)

die sauberste lösung wäre wohl clientseitig mit ajax


----------



## Henry (7. Jan 2008)

Hallo danke für den Vorschlag.

Dies ist mir damals schon in den Sinn gekommen und ich habe es jetzt auch so gemacht. Allerdings kann ich per Ajax den Server ja nur bei GET ansprechen und nicht per POST oder? Womit mein jetztiges Servlet nutzlos ist...

Hat jemand vielleicht noch ne Idee wie man den Server bei AJAX per POST ansprechen kann oder wie man mit dem obrigen Servlet eine "Bitte warten" - Nachricht schreiben kann, die mit der Ergebnisseite vom Server verschwindet?

Tschüß Henry


----------

