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

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

Какой самый простой способ выполнить это?

Ответ 1

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

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

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

Ответ 2

Вот как я буду это делать:

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

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

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

Ответ 3

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

Ответ 6

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

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/

Ответ 7

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

Ответ 8

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

Ответ 9

Вложение Tomcat относительно безболезненно, поскольку такие вещи идут. Вот хорошая ссылка StackOverflow об этом.

Ответ 10

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

Ответ 11

Я только что добавил публичное репо с готовым к запуску сервера с помощью Jetty и JDBC, чтобы запустить ваш проект.

Вытащите из github здесь: https://github.com/waf04/WAF-Simple-JAVA-HTTP-MYSQL-Server.git