#java #sockets #httpresponse #apache-httpcomponents
#java #розетки #httpresponse httpresponse ответ #apache-httpкомпоненты
Вопрос:
Я пытаюсь создать простой сервер на Java.
По сути, все, что у меня есть на данный момент ServerSocket
, — это прослушивание порта. Он работает хорошо. Я хочу реализовать способность серверов отвечать на запросы. Для начала я хочу ответить на плохие запросы с помощью a 503
.
Лучшая идея, которая у меня есть для этого, — использовать a BufferedWriter
, чтобы сделать что-то вроде
...
out.write("HTTP/1.0 503 Bad Requestrn");
out.write("Date: Mon, 23 Jun 2014 23:59:59 GMTrn");
out.write("Server: Apache/1.3.2rn");
...
Однако это кажется очень подверженным ошибкам. Кроме того, я просмотрел HttpComponents
примеры Apache, и у них есть встроенный класс, HttpResponses
однако их использование настолько сложно и требует создания целой инфраструктуры вокруг них.
Есть ли у кого-нибудь какие-либо предложения о том, как просто вернуть HttpResponse
s в Java?
Комментарии:
1. Вот почему существуют HTTP-фреймворки. Посмотрите на сервлеты.
2. Почему вы хотите сделать это вручную?
Ответ №1:
Отправка 503 клиентам из простого серверного сокета не является хорошей идеей, если только клиент и сервер не согласны реализовать протокол HTTP с обеих сторон.
При работе с обычными соединениями с сокетами вы работаете на уровне TCP сетевого стека. Использование логики приложения на уровне TCP не является хорошей идеей, и, следовательно, существуют протоколы прикладного уровня, такие как HTTP.
И если нет реальной необходимости писать новую реализацию протокола, такого как HTTP, тогда не делайте этого. Попробуйте использовать существующие реализации, такие как сервлеты на Java.
Надеюсь, это поможет.
Комментарии:
1. Ну да, предполагая, что сокет и сервер согласны
HTTP
… Я не хочу использовать сервлеты в этом случае
Ответ №2:
HTTP-заголовок заканчивается на double r n, поэтому после вашего последнего поля заголовка добавьте второе r n .