MalformedURLException bei Zeilenumbruch

Guten Tag liebe Experten,

im Moment arbeite ich an einem Applet, das ein Servlet dazu bringen soll, den übermittelten Inhalt in eine Datei auf dem Server zu schreiben.

Das Applet besteht im Grunde aus einem TextArea und einem Absende-Button.
Alles funktioniert prima, wenn ich nur ein Wort in das Feld schreibe.

Sobald ich aber ein Leerzeichen hinter das Wort mache und ein zweites Wort anfüge, passiert beim Drücken des Absende-Buttons gar nichts mehr. Wenn ich eine 2. Zeile in das Textfeld einfüge, gibt es sogar eine MalformedURLException.

Das Lesen einer Datei mit vielen Zeilen und das Anzeigen im TextArea funktioniert tadellos. Nur das Zurückschreiben macht die genannten Probleme.

Ich nutze die Methode (doGet(…) im Servlet und die Fehlermeldung heißt:
java.net.MalformedURLException: Illegal character in URL

Liebe Experten, habt Ihr eine Idee?

Liebe Grüße
Uwe

Hallo,

Ich nutze die Methode (doGet(…) im Servlet und die
Fehlermeldung heißt:
java.net.MalformedURLException: Illegal character in URL

Liebe Experten, habt Ihr eine Idee?

Woraus setzt sich die URL zusammen, die den Fehler auslöst?

Gruß
Heavy

Hallo Uwe,

wenn du den Text bzw. die Sonderzeichen in der TextArea nicht escapst (z. B. Leerzeichen wird zu %20) wirst du mit der GET-Methode immer ein Problem haben. Bei GET werden alle an das Servlet zu übertragenden Parameter in die URL eingeflochten,
etwa so http://meinewebseite.de/meinServlet?param1=asdf&m2=1…
Deswegen auch die Exception.

GET ist insbesondere schlecht, da die URL nicht endlos sein kann (irgendwo bei ~2.000 Zeichen ist Schluss, soweit ich es noch im Kopf habe).

Besser: Die POST-Methode verwenden, da darf „alles“ drin sein und die Länge ist auch nicht beschränkt. Sowohl im Applet verwenden als auch im Servlet (die doPost() überschreiben).

Viele Grüße
Martin

Hallo Heavy,

danke für die Antwort.

Woraus setzt sich die URL zusammen, die den Fehler auslöst?

http://www.haller-mtl.de/Test/Test?“ +
„type=SAVE&“ +
„dirFile=black/Data“ +
„&“ +
„content=“ + content

content repräsentiert: textArea.getText()

Liebe Grüße
Uwe

danke für die Antwort.

Woraus setzt sich die URL zusammen, die den Fehler auslöst?

http://www.haller-mtl.de/Test/Test?“ +
„type=SAVE&“ +
„dirFile=black/Data“ +
„&“ +
„content=“ + content

Wie Martin angemerkt hat müssten Leer und Sonderzeichen im Text durch die entsprechende URL Kodierung ersetzt werden um eine valide URL zu erhalten.

Oder wie vorgeschlagen POST verwenden.

Gruß
Heavy

Hallo Heavy,

Oder wie vorgeschlagen POST verwenden.

POST wäre meine Lieblingsoption.
Ich hatte gehofft, dass ich einfach doGet durch doPost zu ersetzen muss.
Leider funktioniert es nicht. Es gibt eine IOException.
Hier fehlt mir Wissen.

Vermutlich muss ich im Applet oder im Servlet irgend etwas ändern.
Das Kochrezept für doPost scheint anders zu sein.
Hast du eine Idee?

Liebe Grüße
Uwe

Hallo Martin,

Besser: Die POST-Methode verwenden,

POST wäre meine Lieblingsoption.
Ich hatte gehofft, dass ich einfach doGet durch doPost zu ersetzen muss.
Leider funktioniert es nicht. Es gibt eine IOException.
Hier fehlt mir Wissen.

Vermutlich muss ich im Applet oder im Servlet irgend etwas ändern.
Das Kochrezept für doPost scheint anders zu sein.
Hast du eine Idee?

Liebe Grüße
Uwe

Hallo Heavy,

POST würde ich gerne verwenden. Im Moment wird offensichtlich im Servlet automatisch die Methode doGet angesprochen.

Wie muss ich meinen Link anders gestalten, damit er die Methode doPost anspricht? Geht das eigentlich oder muss ich mit der Klasse org.apache.commons.httpclient.methods.PostMethod arbeiten?
Die Methode PostMethod hab ich gegoogelt. Mit dieser Methode habe ich allerdings keine Erfahrung.

Woraus setzt sich die URL zusammen, die den Fehler auslöst?

http://www.haller-mtl.de/Test/Test?“ +
„type=SAVE&“ +
„dirFile=black/Data“ +
„&“ +
„content=“ + content

Liebe Grüße
Uwe
http://www.haller-mtl.de

Hallo Martin,

POST würde ich gerne verwenden. Im Moment wird offensichtlich im Servlet automatisch die Methode doGet angesprochen.

Wie muss ich meinen Link anders gestalten, damit er die Methode doPost anspricht? Geht das eigentlich oder muss ich mit der Klasse org.apache.commons.httpclient.methods.PostMethod arbeiten?

Die Methode PostMethod hab ich gegoogelt. Mit dieser Methode habe ich allerdings keine Erfahrung.

Woraus setzt sich die URL zusammen, die den Fehler auslöst?

http://www.haller-mtl.de/Test/Test?“ +
„type=SAVE&“ +
„dirFile=black/Data“ +
„&“ +
„content=“ + content

Liebe Grüße
Uwe
http://www.haller-mtl.de

Hallo Uwe,

POST würde ich gerne verwenden. Im Moment wird offensichtlich
im Servlet automatisch die Methode doGet angesprochen.

GET ist der Default bei einer URL Connection.

Wie muss ich meinen Link anders gestalten, damit er die
Methode doPost anspricht?

Die Parameter werden nicht mehr der URL angehängt, in „Java ist auch eine Insel“ gibt es ein Beispiel dazu: http://openbook.galileocomputing.de/javainsel9/javai…

Geht das eigentlich oder muss ich
mit der Klasse
org.apache.commons.httpclient.methods.PostMethod arbeiten?

Damit wird es evtl. etwas einfacher zu handhaben, ist aber nicht zwingen notwendig, siehe Beispiel aus der „Insel“.

Gruß
Heavy

Hallo Heavy,

Die Parameter werden nicht mehr der URL angehängt, in „Java
ist auch eine Insel“ gibt es ein Beispiel dazu:
http://openbook.galileocomputing.de/javainsel9/javai…

Das Beispiel habe ich übernommen. Danke für den Tipp.

In der Zeile URL url = new URL bekomme ich allerdings eine FileNotFoundException.

Daraufhin habe ich meinen Provider kontaktiert.
Der möchte sich leider nicht zur Java-Programmierung äußern.

GET-Request
Dieser funktioniert gut in dieser Form:
http://www.haller-mtl.de/Test/Test?param1=value1&m2=…

Dabei repräsentiert das erste „Test“ den Namen der .war-Datei und das zweite „Test“ den Namen der Klasse, die angesprochen werden soll.

POST-Request
Wie könnte der Link in diesem Fall aussehen:
http://www.haller-mtl.de/ ???

Folgende Kombinationen haben bisher nicht funktioniert:

http://www.haller-mtl.de/Test/
http://www.haller-mtl.de/Test/Test/
http://www.haller-mtl.de/post/Test/Test/
http://www.haller-mtl.de/Test/Test/post/

Welche Kombinationen könnte ich noch ausprobieren?

Liebe Grüße
Uwe

Hallo Martin,

Besser: Die POST-Methode verwenden, da darf „alles“ drin sein
und die Länge ist auch nicht beschränkt. Sowohl im Applet
verwenden als auch im Servlet (die doPost() überschreiben).

Die Methode POST möchte ich gern im Applet verwenden.

Deshalb habe ich versucht das Beispiel aus der Javainsel zu verwenden:
http://openbook.galileocomputing.de/javainsel9/javai…

In der Zeile URL url = new URL bekomme ich allerdings eine FileNotFoundException.

Daraufhin habe ich meinen Provider kontaktiert.
Der möchte sich leider nicht zur Java-Programmierung äußern.

GET-Request
Dieser funktioniert gut in dieser Form:
http://www.haller-mtl.de/Test/Test?param1=value1&m2=…

Dabei repräsentiert das erste „Test“ den Namen der .war-Datei und das zweite „Test“ den Namen der Klasse, die angesprochen werden soll.

POST-Request
Wie könnte der Link in diesem Fall aussehen:
http://www.haller-mtl.de/ ???

Folgende Kombinationen haben bisher nicht funktioniert:

http://www.haller-mtl.de/Test/
http://www.haller-mtl.de/Test/Test/
http://www.haller-mtl.de/post/Test/Test/
http://www.haller-mtl.de/Test/Test/post/

Welche Kombinationen könnte ich noch ausprobieren?

Liebe Grüße
Uwe

GET-Request
Dieser funktioniert gut in dieser Form:
http://www.haller-mtl.de/Test/Test?param1=value1&m2=…

Dabei repräsentiert das erste „Test“ den Namen der .war-Datei
und das zweite „Test“ den Namen der Klasse, die angesprochen
werden soll.

POST-Request
Wie könnte der Link in diesem Fall aussehen:
http://www.haller-mtl.de/ ???

Folgende Kombinationen haben bisher nicht funktioniert:

http://www.haller-mtl.de/Test/
http://www.haller-mtl.de/Test/Test/
http://www.haller-mtl.de/post/Test/Test/
http://www.haller-mtl.de/Test/Test/post/

Wenn der GET Request funktioniert und die doGet Methode deines Servlelts anspricht sollte ein POST auf die selbe URL ohne Parameter eigentlich die doPost Methode ansprechen, also http://www.haller-mtl.de/Test/Test

Momentan meldet Tomcat aber für alle URLs einen Fehler.

Gruß
Heavy

Hallo Heavy,

Wenn der GET Request funktioniert und die doGet Methode deines
Servlelts anspricht sollte ein POST auf die selbe URL ohne
Parameter eigentlich die doPost Methode ansprechen, also
http://www.haller-mtl.de/ Test/Test

Momentan meldet Tomcat aber für alle URLs einen Fehler.

Ein Html-Formular mit der Methode Post ist meine Zwischenlösung. Die akzeptiert der Server.

Danke fürs plaudern.

Liebe Grüße
Uwe
http://www.haller-mtl.de/
.

Hallo Uwe,

klappt’s mittlerweile?

Der Server-Provider hat damit nichts zu tun, POST/GET werden zwischen Client und Server (ich schätze du verwendest Tomcat?) ausgehandelt.

Viele Grüße
Martin

Hallo Martin,

klappt’s mittlerweile?

Guckst du:
/t/malformedurlexception-bei-zeilenumbruch/6797435/14

Liebe Grüße
Uwe

http://www.haller-mtl.de/homepage/breakout/breakout…