Advanced   Java   Services
Datenübertragung mit GET und POST
Back Next Up Home

Jede Datenübertragung via HTTP wird durch einen Header eingeleitet. Der Server überträgt dann die eigentlichen Daten im BODY. Der Client dagegen hat zwei Möglichkeiten, Daten an den Server zu schicken. Er kann wie der Server die Daten im BODY übertragen, er kann aber auch die Daten zusammen mit dem URL übertragen.

GET


Mit GET signalisiert der Client nicht nur eine Anforderung nach einer Datei, sondern gleichzeitig, die Methode, wie er zusammen mit dieser Anforderung Daten an den Server schickt. Jeder kennt den Vorgang, in dem man ein Textfeld in einer Suchmaschine ausfüllt und den eingegebenen String mit ENTER an den Server sendet. Wenn man in die Adresszeile des Browsers schaust, sieht man dann z.Bsp. folgendes "http://www.google.de/search?hl=de&ie=UTF-8&oe=UTF-8&q=rfc+http&btnG=Google+Suche&meta=". Hier werden nach dem Fragezeichen zusammen mit Adresse Daten gesendet. Daten, die so gesendet werden, werden URLcodiert. Meist haben die Daten die Form name=wert, wobei diese Paare durch ein & getrennt werden.

Aufbau eines URL-Anhangs

http://www.xxx.zzz/dateiName.suff?name1=wert1&name2=werts&name3=wert3

Hier dürfen keine Leerzeichen auftauchen, da diese vom Server als Ende des Strings aufgefaßt werden, weiter dürfen in den Wertteilen natürlich keine Zeichen wie ? oder = oder & vorkommen, woraus sich die Notwendigkeit einer Codierung sofort ergibt. Jeder Browser kann diese Codierung vornehmen. UTF-8 Codierung. Im nächsten Kapitel wird die Hilfsklasse URLEncoder behandelt. Dort finden Sie ein Applet, bei dem Sie einen String eingeben können und der dann UTF-8 codiert ausgegeben wird.

POST


Umfangreiche oder sensible Daten wird man nicht mit GET übertragen. In diesem Fall wählt man die POST Methode. Bei dieser Methode sendet der Client die Daten im BODY nach dem Header. Dazu beginnt der Header nicht mit dem Schlüsselwort GET sondern mit POST. Adressen, die man in die Adresszeile eines Browsers eingibt, werden immer mit GET abgeschickt. Mit sogenannten HTML-Formularen kann man zusätzlich Daten versenden, die beim Client eingegeben werden. So kann jeder Browser u.a. etwa Textfelder oder CheckBoxen usw. anbieten. Im HTML-Text kann man dann festlegen, welche der beiden Übertragungsmethoden der Browser verwenden soll.

HTML-Formulare


Mit Hilfe von HTML kann man sogenannte Formulare anbieten. Meist sind diese Textfelder oder Checkboxen, in denen ein user Daten eingeben kann. Je nachdem, welche Übertragungsmethode man hier im form-Tag angibt, werden die Daten dann mit GET oder mit POST übertragen. Ausgelöst wird die Datenübertragung durch Betätigen eines submit-Buttons. Ein einfaches Formular kann wie folgt aussehen:

<form action="http://www.xxx.zzz/file.pl" method="get">
Vorname
<br><input type="text" name="vor" size=40 maxlength=40>
<br>Nachname
<br><input type="text" name="nach" size=40 maxlength=40>
<br>ID
<br><input type="text" name="id" size=40 maxlength=40>
<br>Nachricht
<br><textarea name="msg" rows=7 cols=30></textarea>
<br><input type="reset" value=" Zurücksetzen ">
<input type="submit" value="Daten senden ">
</form>

Das Formular ist weitgehend selbsterklärend. Ersetzt man im Attribut method get durch post, so wird, wen wundert's, POST als Übertragungsmethode gewählt. Im Übrigen braucht die Übertragung mit GET nicht explizit angegeben werden, da dies die Defaulteinstellung für das form-Tag ist. Das obenstehende Formular sieht in einem Browser wie folgt aus:

Vorname

Nachname

ID

Nachricht


Füllt man das Formular wie folgt aus,

H. M.
Straub
12+34
§9 100%-ig ok!
§11 nachbessern?
Außerdem: Währungen immer $

und betätigt den submit-Button, so sendet der Browser etwa folgendes:

GET /file.pl?vor=H.+M.&nach=Straub&id=12%2B34&
msg=%A79+100%25-ig+ok%21%0D%0A%A711+nachbessern%3F%0D%0AAu%DFerdem%3A+W%E4hrungen+immer+%24%0D%0A
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Accept-Language: de
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: 127.0.0.1
Connection: Keep-Alive
\r\n
\r\n

wobei die ersten beiden Zeilen real nur eine Zeile sind. Der Zeilenumbruch vor msg dient nur der besseren Lesbarkeit.

Wählt man im gleichen Formular und bei gleicher Eingabe POST als Übertragungsmethode, so sendet ein Browser die Daten wie folgt.

POST /file.pl HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Accept-Language: de
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: 127.0.0.1
Content-Length: 130
Connection: Keep-Alive
Cache-Control: no-cache
\r\n
\r\n
vor=H.+M.&nach=Straub&id=12%2B34&msg=%A79+100%25-ig+ok%21%0D%0A%A711+
nachbessern%3F%0D%0AAu%DFerdem%3A+W%E4hrungen+immer+%24%0D%0A

Wiederum ist hier der Zeilenumbruch zur letzten Zeile nicht vorhanden, sondern dient der besseren Lesbarkeit. Wie man sieht, werden in einem Formular die Daten auch dann URL-codiert, wenn man sie mit POST verschickt.

GET und POST mit Hilfe von URLConnection


Wie realisiert man GET und POST Aufrufe in Java. Man kann mit Socketverbindungen arbeiten. In diesem Fall muß man die entsprechenden Header selbst codieren. Man kann aber auch mit der Klasse URLConnection arbeiten. In diesem Fall werden die GET- bzw. POST Header automatisch erzeugt. Näheres dazu findet sich in den entsprechenden Kapiteln

Die Klasse URLConnection

und

Sockets.

top Back Next Up Home