У меня есть простое Java-приложение, в основном сервер, реализованный с использованием com.sun.net.HttpServer
API, который читает файл и просто отправляет обратно тексты после некоторой обработки.Серверная часть выглядит просто так:
server = HttpServer.create(new InetSocketAddress(serverPort), 0);
logger.info("EventRetriever REST server listening to port: " + serverPort);
server.createContext("/getEvents", new MedatadaHandler());
server.setExecutor(null);
server.start();
// ...
@Override
public void handle(HttpExchange he) throws IOException {
//...
String response = requestEvents();
he.sendResponseHeaders(200, response.length());
OutputStream os = he.getResponseBody();
os.write(response.toString().getBytes());
os.close();
}
//...
public String requestEvents(){
//...
// this printing on the console looks fine though:
logger.info(jsonString);
return jsonString;
}
Я запускаю свой jar
файл с java -jar myApp.jar
в командной строке или просто в своей IDE.Я наблюдаю некоторые странные поведения, иногда просто зависания, когда требуется отправка текстов, содержащих специальные символы, такие как музыкальный символ ♪
.Когда я вызываю IP:PORT/getEvent
через браузер, поведение становится таким странным:
Если я запускаю его в Windows Powershell или в командной строке, на консоли появляется символ ?
, и я получаюиз браузера также отображается как ?
.Но когда я запускаю программу на linux-сервере или в моей Eclipse IDE, она правильно отображается на консоли (как ♪
), но в браузере я получаю следующую ошибку, хотя статус 200 OK
.Я вижу на консоли, что Java-приложение продолжает зацикливать печать строки каждые несколько секунд (как будто оно пытается отправить данные, но не может что-то блокировать!).Но я не получаю никаких исключений или ошибок в приложении (я регистрирую все возможные ошибки).
Я очень запутался в этом поведении,Что происходит?!
Во-первых, почему то, что я получаю, зависит от среды, в которой я запускаю свое Java-приложение ?!Если командная строка Windows / Powershell показывает символ как ?
, я ожидаю, что он будет отображаться локально, как этот.Почему я должен видеть это также как ?
в моем браузере ?!Приложение Java должно быть независимым от среды.
И, во-вторых, что происходит с этой ошибкой в среде Linux / Eclipse при запросе строки с этим символом?