HTTP-Server - Problem mit der versenden von Sonderzeichen

Smily0412

Mitglied
HTTP-Server - Problem beim versenden von Sonderzeichen

Hoi,
Folgendes Problem:
Ich habe mir ein kleines programm geschrieben, um das mit dem HTTP-Server von Java zu lernen.

Dabei ist mir aufgefallen, dass das Programm probleme hat, wenn der server sonderzeichen (ä, ö, ü...) in der antwort haben soll.

um es zu verdeutlichen:

Code:
package test;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class HttpServerDemo {
	public static void main( String[] args ) throws IOException {
		InetSocketAddress sa = new InetSocketAddress(1234);
		HttpServer server = HttpServer.create( sa, 0 );
		server.createContext( "/", new Responser());
		server.start();
	}
}

class Responser implements HttpHandler { 
	public void handle( HttpExchange httpExchange ) throws IOException {
		String path = httpExchange.getRequestURI().getPath();
		String response = path;
		System.out.println("1");		
		httpExchange.sendResponseHeaders( 200, response.length() );
		System.out.println("2");
		OutputStream os = httpExchange.getResponseBody();
		System.out.println("3");
		os.write( response.getBytes() );
		System.out.println("4");
		os.close();
		System.out.println("5");
	} 
}

wenn man hier im Browser http://localhost:1234/ eingibt, müsste ein einfaches "/" erscheinen. Das funktioniert auch. Wenn man dann mal "localhost:1234/blub" versucht, klappt es auch (es wird "/blub" ausgegeben).

Wenn nun aber z.B. localhost:1234/mööp aufgerufen wird, bleibt das programm. bei
Code:
os.write( response.getBytes() );
stehen.

Ich konnte das problem soweit einschränken, dass es nur passiert, wenn der server in seiner antwortseite irgendwelche umlaute hat.

kann mir jemand sagen, wie ich das problem umgehen kann?
 
Zuletzt bearbeitet:
Naja, Sonderzeichen in URLs sind so eine Sache. Normalerweise geht man davon aus, dass Web-Adressen englisch sind und da werden solche Zeichen halt nicht unterstützt. Also ich denke dein Fehler kommt daher. Ab und zu muss/kann man sie zwar benutzen um zum Beispiel Formularfelder auszulesen (es hindert den User ja niemand dran Umlaute zu benutzen), aber dann müsste man die mit java.net.URLDecoder erst wieder in Sonderzeichen zurückwandeln (bzw. wenn man die verschicken will mit java.net.URLEncoder durch andere Zeichen ersetzen (das sind diese komischen %-Dinger in manchen URLs)).

Also vielleicht probierst du mal
Java:
os.write(java.net.URLEncoder.encode(response, "UTF-8").getBytes() );
vielleicht hilft's ja.

Aber das ist jetzt nur eine Vermutung, weil ich es so wie du noch nie gemacht hab. Hab damit bisher nur in JSPs gearbeitet und da immer nur direkt mit Strings.
 
Das hat nix mit der url zutun, die ich aufgerufen habe, sondern damti was der server antwortet.. der code oben dient nur zur demonstration..

auch wenn in der URL keine sonderzeichen sind, und der server in der antwortpage irgendwelche umlaute hat taucht das problem auf..

gruß,
Smily0412
 
Zurück