it-swarm.com.ru

Создать простой HTTP-сервер с Java?

Какой самый простой способ создать простой HTTP-сервер с Java? Есть ли какие-нибудь библиотеки в общем для облегчения этого? Мне нужно только ответить на GET/POST, и я не могу использовать сервер приложений.

Какой самый простой способ сделать это?

65
Stefan Kendall

Используйте Jetty . Вот учебник для встраивание Jetty . (Вот устаревшее руководство .)

Jetty довольно легкий, но он предоставляет контейнер сервлетов, который может противоречить вашему требованию против использования "сервера приложений".

Вы можете встроить сервер Jetty в свое приложение. Jetty разрешает ИЛИ встроенные OR опции контейнера сервлета.

44
Kris

Вот как я мог бы пойти по этому поводу:

  1. Запустите прослушивание ServerSocket (возможно, на порту 80).
  2. Как только вы получите запрос на соединение, примите и перейдите к другому потоку/процессу (это оставит ваше ServerSocket доступным для прослушивания и принятия других соединений).
  3. Разберите текст запроса (в частности, заголовки, в которых вы увидите, GET или POST, и переданные параметры).
  4. Ответьте с помощью собственных заголовков (Content-Type и т.д.) И HTML.

Я считаю полезным использовать Firebug (в Firefox), чтобы увидеть примеры заголовков. Это то, что вы хотите подражать.

Попробуйте эту ссылку: - Многопоточный сервер на Java

31
Philippe Signoret

Самым простым является Simple есть учебное пособие, нет WEB-INF, нет Servlet API, нет зависимостей. Просто простой легкий HTTP-сервер в одном JAR.

21
ng.

Если вы используете Sun JDK, вы можете использовать встроенная библиотека
Посмотрите на этом сайте, как использовать.

Если нет нескольких Серверы с открытым исходным кодом HTTP здесь , которые вы можете встроить в свое программное обеспечение.

8
Romain Hippeau

Я удивлен, что этот пример не здесь:

http://hc.Apache.org/httpcomponents-core-ga/httpcore/examples/org/Apache/http/examples/ElementalHttpServer.Java

РЕДАКТИРОВАТЬ >> Выше ссылка не доступна. Вот выдержка из примера POST, за которой следует ссылка на примеры HTTP.

 if (!conn.isOpen()) {
        Socket socket = new Socket(Host.getHostName(), Host.getPort());
        conn.bind(socket);
    }
    BasicHttpEntityEnclosingRequest request = new
    BasicHttpEntityEnclosingRequest("POST",
    "/servlets‐examples/servlet/RequestInfoExample");
    request.setEntity(requestBodies[i]);
    System.out.println(">> Request URI: " + request.getRequestLine().getUri());
    httpexecutor.preProcess(request, httpproc, coreContext);
    HttpResponse response = httpexecutor.execute(request, conn, coreContext);
    httpexecutor.postProcess(response, httpproc, coreContext);
    System.out.println("<< Response: " + response.getStatusLine());
    System.out.println(EntityUtils.toString(response.getEntity()));
    System.out.println("==============");
    if (!connStrategy.keepAlive(response, coreContext)) {
    conn.close();
    } else {
    System.out.println("Connection kept alive...");
    }

http://hc.Apache.org/httpcomponents-core-ga/httpcore/examples/org/Apache/http/examples/

4
nikdeapen

Java 6 имеет встроенный http-сервер по умолчанию.

проверьте ветку здесь

Кстати, если вы планируете использовать веб-сервис для отдыха, вот простой пример с использованием трикотажа .

4
Titu

Я написал учебник, объясняющий, как написать простой HTTP-сервер некоторое время назад на Java. Объясняет, что делает код и почему сервер написан таким образом в ходе обучения. Может быть полезно http://kcd.sytes.net/articles/simple_web_server.php

3
Charles Dobson

Jetty это отличный способ легко встроить HTTP-сервер. Он поддерживает собственный простой способ подключения обработчиков и является полноценным сервером приложений J2EE, если вам нужна дополнительная функциональность.

1
maerics

Встраивание Tomcat относительно безболезненно. Вот хорошая ссылка на StackOverflow.

1
Dan

ndertow - это легкий неблокирующий блок встроенный веб-сервер , который вы можете быстро запустить и запустить.

public static void main(String[] args) {
Undertow.builder()
        .addHttpListener(8080, "localhost")
        .setHandler((exchange) -> exchange.getResponseSender().send("hello world"))
        .build().start();
}
0
Bill O'Neil

Контейнер с сервлетами - определенно путь. Если Tomcat или Jetty слишком тяжелые для вас, рассмотрите Winstone или TTiny .

0
Michael Borgwardt