Создать простой HTTP-сервер с Java? - PullRequest
65 голосов
/ 27 апреля 2010

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

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

Ответы [ 12 ]

44 голосов
/ 27 апреля 2010

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

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

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

31 голосов
/ 27 апреля 2010

Вот как бы я поступил так:

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

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

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

21 голосов
/ 27 апреля 2010

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

8 голосов
/ 27 апреля 2010

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

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

4 голосов
/ 11 сентября 2013

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

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 голосов
/ 12 июля 2013

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

Проверьте нить здесь

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

3 голосов
/ 20 марта 2012

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

1 голос
/ 27 апреля 2010

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

1 голос
/ 27 апреля 2010

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

0 голосов
/ 19 марта 2019

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

public static void main(String[] args) {
Undertow.builder()
        .addHttpListener(8080, "localhost")
        .setHandler((exchange) -> exchange.getResponseSender().send("hello world"))
        .build().start();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...