# Apache HTTPClient Server log ausgeben ?!



## MoinMoin (6. Sep 2012)

Hallo liebe Community,

ich habe folgendes vor :

Ich habe einen HTTPClient der sich mit einem Webservice verbindet und dort arbeitet.

Ich würde gern wissen ob es möglich ist, dem Benutzer des Clients die Möglichkeit zu geben, Informationen über den Fortschritt zu geben. 
Z.B. : 
- Connection to ......
- Login....
- Sending Data....
- Deleting requested Item.....
- Success
- closing Connection...
etc....

Was brauche ich dafür ? Welches Tutorial muss ich durcharbeiten? Protokoll oder Log ? 

Lieben Gruß


----------



## gp (6. Sep 2012)

Im einfachsten Fall das ganze zur Laufzeit über die Konsole ausgeben:
System.out.println("...");

Die Frage ist, was du erwartest? HTTP funktioniert recht simpel: Anfrage schicken, Antwort bekommen, Verbindung schließen. Das heißt: in der Anfrage sind auch die Zugriffsdaten enthalten, das ist dann alles nur ein Schritt.

Vielleicht verstehe ich dich auch nicht - bin ja kein Hellseher 

Günter


----------



## MoinMoin (7. Sep 2012)

Danke erstmal für die Antwort. 

Ich habe folgenden Client: 


```
public static void main(String[] args) throws Exception{
	       DefaultHttpClient httpclient = new DefaultHttpClient();
	        try {
	            HttpHost target = new HttpHost("ADRESSE", 80, "http");
	        	HttpEntity entity = null;
	            HttpPost req = new HttpPost("WEBSERVICE");
	            	            	            
	            String username = "USERNAME";
	            String password = "PASSWORD";
	            String authorizationHeaderValue = username + ":" + password;
	            BASE64Encoder encoder = new BASE64Encoder();
	            authorizationHeaderValue = "Basic " + encoder.encode(authorizationHeaderValue.getBytes());
	            Header authorizationHeader = new BasicHeader("Authorization", authorizationHeaderValue);
	            req.addHeader(authorizationHeader);
	            
	            String soapActionHeaderValue = "http.....................";
	            Header soapActionHeader = new BasicHeader("SOAPAction", soapActionHeaderValue);
	            req.addHeader(soapActionHeader);
	            
	            InputStream is = com.generali.test.Main.class.getClassLoader().getResourceAsStream("templateRequest");
	            String templateString = IOUtils.toString(is, "UTF-8");
	            
	            
	            FileFilter filter = new FileNameExtensionFilter("Excel-Datei", "xls");
	            
	            // JFileChooser zum öffnen einer bestimmten Excel-Tabelle
	            JFileChooser chooser = new JFileChooser();
	            chooser.setCurrentDirectory(new File("D:/"));
	            chooser.addChoosableFileFilter(filter);	            
	            chooser.showOpenDialog(null);
	            	
	            	Workbook workbook = Workbook.getWorkbook(chooser.getSelectedFile()); 
	            	Sheet sheet = workbook.getSheet(0);              	
	            
	            //Geht das Excel Dokument durch und nimmt die Werte aus der ersten und dritten Spalte...
	    		for (int i = 3; i < sheet.getRows(); i++) {
	    		// ...solange es Zeilen im Excel Dokument gibt
	    			List<AbfrageObjekt> objekte = new ArrayList<AbfrageObjekt>();
	    		AbfrageObjekt ao = new AbfrageObjekt();
	    		
	    		// Wenn die VorgangsID in der 1.Spalten liegt
	    		ao.setVorgangsID(sheet.getCell(0, i)); 
	    		ao.setSchluessel(sheet.getCell(2, i)); 

	    		objekte.add(ao);	            
	    		
	    	
	    		// Übergibt die Werte an hisVorgangsIdentifikation und referenzschluesselMeldung
	            Cell hisVorgangsIdentifikation =  ao.getVorgangsID(); 
	            Cell referenzschluesselMeldung = ao.getSchluessel();
	            String HisVorgangsIdentifikation = hisVorgangsIdentifikation.getContents();
	            String ReferenzschluesselMeldung = referenzschluesselMeldung.getContents();
	            System.out.println("|||||||||||||||||||||||||||||||||||||||||||||||||||");
	            System.out.println("ID lautet: " + HisVorgangsIdentifikation + " Schlüssel lautet: " + ReferenzschluesselMeldung );
	            System.out.println("|||||||||||||||||||||||||||||||||||||||||||||||||||");

	            String referenzschluesselLoeschung = "L1";
	            String content = MessageFormat.format(templateString, HisVorgangsIdentifikation, ReferenzschluesselMeldung, referenzschluesselLoeschung);
	            
	            StringEntity stringEntity = new StringEntity(content);
	            stringEntity.setContentType("application/xml");
	            req.setEntity(stringEntity);

	            entity = req.getEntity();
	            if (entity != null) {
	                System.out.println(EntityUtils.toString(entity));
	            }

	            System.out.println("executing request to " + target);
	            HttpResponse rsp = httpclient.execute(target, req);
	                      

	            System.out.println("----------------------------------------");
	            System.out.println(rsp.getStatusLine());
	            Header[] headers = rsp.getAllHeaders();
	            for (int j = 0; j < headers.length; j++) {
	                System.out.println(headers[j]);
	            }
	            System.out.println("----------------------------------------");

	            entity = rsp.getEntity();
	        
	                  
	            if (entity != null) {
	                System.out.println(EntityUtils.toString(entity));
	            }
	    		}
	        
	        	
	        } finally {
	        	// When HttpClient instance is no longer needed,
	        	// shut down the connection manager to ensure
	        	// immediate deallocation of all system resources
	        	//JOptionPane.showMessageDialog(null, "Die Objekte wurden erfolgreich gelöscht !");
	        	httpclient.getConnectionManager().shutdown();
	 	

	        }        
}
}
```

Der connected sich also zum Webservice, schickt den Header mit USERNAME und PASSWORD... loggt sich dort ein.. liest dann Werte aus einer Excel-Tabelle und übergibt diese als HisVorgangsIdentifikation und ReferenzschluesselMeldung... Jetzt sucht er über den Webservice in einer Datenbank nach diesen Einträgen und löscht diese soweit sie vorhanden sind. 

Ich möchte dem Benutzer dieses Clients jetzt die Möglichkeit geben das ein Fenster erscheint, worin steht was gerade passiert (wie oben beschrieben)

Günter du sagst, dies passiert ja sowieso im Hintergrund bei HTTP. Genau diese Kommunikation zwischen Client und Server möchte ich dem User ausgeben lassen. Nicht in der Konsole, sondern in einem separaten Fenster (JOptionPane oder ähnliches).

Inwieweit kann ich dieses umsetzen.. Habe in Sachen Client/Server kommunikation keine Erfahrungen. Bin noch Student und diese Themen werden denke ich erst noch kommen. Da ich aber gerade diese Aufgabe in einem Praktikum bekommen habe, ist es für mich eine gute Möglichkeit, mich zu beweisen.

Bin für jede Hilfe Dankbar !

Liebe Grüße


----------



## gp (7. Sep 2012)

Ich kann mich aktuell nicht durch den Quellcode wühlen - der ist mit meinem Tapatalk-Client nicht lesbar.

Die Lösung ist nicht trivial und da ich kaum mit Swing programmiere, habe ich auch nichts fertiges. 

Im Prinzip gibt es 3 Threads:
Dein Hauptprogramm
Die Kommunikation mit dem Server
Das Ausgabefenster

Also schreibt der Kommunikationsteil erst mal die Meldungen weg, in einen Vector oder FiFo-Buffer.
Das Ausgabefenster überwacht diesen Speicher und schreibt neue Zeilen auf den Bildschirm.

Das hört sich einfacher an als es ist. Die Prozesse müssen gestartet, gestoppt und synchronisiert werden. Weniger eine Anfängeraufgabe 

Vielleicht hat Swing ja entsprechende Klassen, die es einfacher machen. Such mal nach Observer.

Günter

Gesendet von meinem GT-P7501 mit Tapatalk 2


----------

