Advanced   Java   Services URL encoding (and decoding) Back Next Up Home


Die Klasse URLEncoder

Wenn der Browser Formulardaten abschickt, werden diese immer urlcodiert, egal, ob die Daten mit GET oder mit POST gesendet werden. Einzelheiten zu dieser Codierung muß man nicht wissen. Die Hilfsklasse URLEncoder bietet zwei statische Methoden an, wovon die eine als deprecated markiert ist. Die andere statische Methode codiert einen String unter Angabe der Art der Codierung. Dieser kann dann etwa als URL-Anhang gesendet werden. Das funktioniert nach dem folgenden Rezept.

String codierterString = URLEncoder.encode(uncodierterString, "UTF-8");

Den codierten String kann man dann etwa so versenden

URL url = new URL(http://www.straub.as/path/fileName.xxx?codierterString);

Oft hat man allerdings wie in einem Formular name, value paare, die man versenden will und dann sieht der Aufbau so aus:

http://www.straub.as/path/fileName.xxx?name1=value1&name2=value2

Diesen Aufbau muß man händisch herstellen. Zuerst muß man alle (name, value)-Paare URL-codieren und dann die codierten Einzelteile nach obigem Muster zusammenzusetzen. Hiermit biete ich eine kleine Hilfsklasse URLEncoder2 an, die einem diese Arbeit abnimmt.


Die Klasse URLEncoder2
ReturntypName der Methode
public static String makeAppendix(String[] unencodedNames, String[] unencodedValues) throws UnsupportedEncodingException
Die Methode gibt einen vollständigen nach UTF-8 codierten String zurück. Falls der String mit GET verschickt wird, muß das Fragezeichen noch vorneweg hinzugefügt werden, bei der Versendung mit POST braucht kein Fragezeichen vorangestellt werden. Falls die beiden Arrays nicht die gleiche Länge aufweisen, wird eine IllegalArgumentException geworfen, ebenso wenn die Arraylänge nicht positiv ist.

Es ist kein großer Aufwand, diese einfache Klasse zu schreiben, wer aber nicht will, der kann sie hier herunterladen.

In dem folgenden Applet können sie Strings codieren und decodieren. Es gibt ja auch das Gegenstück zur Klasse URLEncoder, nämlich die Klasse URLDecoder, die entsprechend eine Methode decode() anbietet.

Falss man keinen Text aus dem Clipboard einfügen können, so hat das Applet nicht die Rechte mit dem SystemClipboard Daten auszutauschen. In diesem Fall editiert man die Datei java.policy in JAVA_HOME/lib/security und ergänzt unter // "standard" properies that can be read by anyone die Zeile permission java.awt.AWTPermission "accessClipboard";


Valid XHTML 1.0 Transitional top Back Next Up Home