# Applet soll XML-File auf Server speichern



## HarryG32 (28. Okt 2012)

Ich möchte ein File, das per Applet erzeugt wurde, auf einem Server speichern. Bisher funktioniert es so, dass ich eine Collection von Objekten an ein Servlet übergebe und aus diesen Objekten auf der Serverseite ein XML-File erzeuge. Das Ganze ist mir aber zu umständlich, da ich dadurch einige Klassen mehr auf der Serverseite brauche.

Könnte ich das File vor dem Speichern auf dem Client speichern, wäre es viel einfacher. Das darf ich aber ned und ein signiertes Applet will ich ned haben. Eine andere Technologie möchte ich jetzt auch nimma verwenden, da ich schon relativ weit damit bin.

Geht es, dass man das XML-File nur temporär erzeugt (ohne die Applet-Einschränkungen?) bzw. im Erstellungsprozess gleich den Stream (z.b.der in ein File schreiben würde) an das Servlet schickt??


----------



## FArt (30. Okt 2012)

HarryG32 hat gesagt.:


> Geht es, ... im Erstellungsprozess gleich den Stream...an das Servlet schickt??




Klar.


----------



## nillehammer (30. Okt 2012)

Applets dürfen ohne erweiterte Berechtigungen zum Server, von dem sie stammen, zurückfunken. Du könntest das generierte XML als String über einen POST-Request an Dein Servlet senden. Entweder bindest Du dafür eine externe Lib à la Apache HttpClient ein oder du machst es mit Java-Bordmitteln. Stichwort hier ist _HttpUrlConnection_. Wenn du nach "HttpUrlConnection Post XML to Servlet" googelst, findest Du direkt Code, den Du kopieren kannst.


----------



## HarryG32 (30. Okt 2012)

@Fart: Und wie geht das? Bitte etwas mehr Infos? 

@nillehammer: 



> Du könntest das generierte XML als String über einen POST-Request an Dein Servlet senden.



Wenn ich ein XML generiere, heisst das doch, dass ich es auf dem Clientrechner speichere oder? Genau das möchte ich ned haben bzw. darf mein Applet ned...Ich möchte beim Erzeugen der XML-Datei, diese gleich auf dem Server speichern und das per Servlet auf der Serverseite.

Vielleicht meintest du das ja mit dem String, also statt in einen FileOutputStream in ein String-Objekt schreiben, ich werd mir die Sache mal überlegen bzw. auch dazu weiter googeln...

Hier wird das File auf der Serverseite erzeugt, davor ist der Code der den Vektor mit Objekten ausliest und die Objekte ensprechend als Elemente mit Attributen in die XML-Struktur einfügt:


```
try {
        XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
        FileOutputStream output = new FileOutputStream(filename); 
			
	outputter.output(dokument,output);
	System.out.println("File created");
			
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
```

Kann ich das XML-Document verschicken und den obigen Teil auf dem Server ausführen??


----------



## FArt (30. Okt 2012)

Du kannst eine Verbindung zum Server aufbauen und anstatt die Daten in eine Datei zu streamen, streamst du sie direkt zum Server, der natürlich mit dem reinen XML etwas anfangen können muss.

Ohne deinen Anforderungen genau zu kennen würde ich aber auch die Aussage anfechten wollen, dass das auf dem Server zu umständlich ist. Das kommt aber definitiv auf den Anwendungsfall an bzw. was für Daten benötigt werden, um das XML generieren zu können.


----------



## nillehammer (30. Okt 2012)

HarryG32 hat gesagt.:
			
		

> Wenn ich ein XML generiere, heisst das doch, dass ich es auf dem Clientrechner speichere oder?


Nein, das meinte ich damit nicht. Ich meinte halt, dass Du aus Deinen Daten eine wie auch immer geartete XML-Struktur (im RAM) erzeugt hast. Dein Code zeigt, dass Du dies in einer Variablen namens "dokument" getan hast.

Der von Dir gezeigte Code macht im Grunde genau das, was ich vorgeschlagen habe. Er wandelt die XML-Struktur in einen String und schiebt diese in einen OutputStream (hier FileOutput). Baue Deinen Code so um, dass Du statt dem FileOutputStream den Outputstream einer URLConnection nimmst. Wie Du daran kommst, siehe mein letzter Post.

Auf Seiten des Servlets reicht es imho, in der doPost-Methode den String aus dem Stream zu lesen und direkt in eine Datei zu schreiben. Eine Zwischenwandlung in XML halte ich hier für unnötig, falls du "nur" speichern möchtest.

Ach ja, vermeide bei Übertragungen das Pretty-Format (Format.getPrettyFormat()). Das erzeugt je nach Struktur des XML-Dokuments einen riesen Overhead für die Zeilenumbrüche und Einrückungen.


----------



## HarryG32 (30. Okt 2012)

Hallo, ich hab die Lösung!  Ich schicke einfach das erzeugte XML-Document rüber und mache folgendes im Servlet, sobald ich das Document drüben habe:


```
private void saveXMLDocument(String filename, Document document){
		
		try {
			XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
			FileOutputStream output = new FileOutputStream(filename);
			
			outputter.output(document,output);
			System.out.println("File created");
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
```

Danke für eure Denkanstösse! Nun erspar ich mir einige Klassen auf der Serverseite, jippie yeah! 

@nillehammer: ich muss die Daten auch wieder laden, darum brauche ich das XML-Format...aber so lässt es sich ja ganz einfach bewerkstelligen


----------

