web-dev-qa-db-fra.com

Créer un serveur HTTP simple avec Java?

Quel est le moyen le plus simple de créer un serveur HTTP simple avec Java? Y a-t-il des bibliothèques communes qui facilitent cela? Je n'ai qu'à répondre à GET/POST, et je ne peux pas utiliser un serveur d'applications.

Quel est le moyen le plus simple d'y parvenir?

65
Stefan Kendall

Utilisez jetée . Voici un tutoriel pour incorporant Jetty . (Voici un tutoriel obsolète .)

Jetty est assez léger, mais il fournit un conteneur de servlet, ce qui peut contredire votre exigence d'utiliser un "serveur d'application".

Vous pouvez intégrer le serveur Jetty dans votre application. Jetty autorise les options de conteneur de servlet intégrées OR.

43
Kris

Voici comment je procéderais:

  1. Lancer une écoute ServerSocket (probablement sur le port 80).
  2. Une fois que vous avez reçu une demande de connexion, acceptez et passez à un autre thread/processus (ceci laisse votre ServerSocket disponible pour continuer à écouter et accepter les autres connexions).
  3. Analyser le texte de la demande (en particulier les en-têtes où vous verrez s'il s'agit d'un objet GET ou POST et les paramètres transmis).
  4. Répondez avec vos propres en-têtes (Content-Type, etc.) et le HTML.

Je trouve utile d’utiliser Firebug (dans Firefox) pour voir des exemples d’en-têtes. C'est ce que vous voulez imiter.

Essayez ce lien: - Serveur multithread en Java

31
Philippe Signoret

Le plus simple est Simple il y a un tutoriel, pas de WEB-INF, pas d'API Servlet, pas de dépendances. Juste un simple serveur HTTP léger dans un seul JAR.

21
ng.

Si vous utilisez le JDK de Sun, vous pouvez utiliser cette bibliothèque intégrée
Regardez ce site pour savoir comment l'utiliser.

S'il n'y a pas plusieurs Serveurs HTTP Open Source ici que vous pouvez intégrer dans votre logiciel.

8
Romain Hippeau

Je suis surpris que cet exemple ne soit pas ici:

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

EDIT >> Le lien ci-dessus n'est pas accessible. Voici un extrait de l'exemple POST suivi du lien vers les exemples 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 a un serveur http intégré par défaut.

Vérifiez le fil ici

En passant, si vous envisagez d’avoir un service Web de repos, voici un exemple simple utilisant jersey .

4
Titu

J'ai écrit un tutoriel expliquant comment écrire un serveur HTTP simple il y a longtemps en Java. Explique ce que fait le code et pourquoi le serveur est écrit de cette façon au fur et à mesure de la progression du didacticiel. Pourrait être utile http://kcd.sytes.net/articles/simple_web_server.php

3
Charles Dobson

Jetty est un excellent moyen d'intégrer facilement un serveur HTTP. Il prend en charge son propre moyen simple d'attacher des gestionnaires et constitue un serveur d'applications J2EE complet si vous avez besoin de plus de fonctionnalités.

1
maerics

L’intégration de Tomcat est relativement peu pénible. Voici une bonne référence StackOverflow à ce sujet.

1
Dan

Undertow est un serveur Web intégré non bloquant léger que vous pouvez obtenir. opérationnel très rapidement.

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

Un conteneur de servlets est définitivement la voie à suivre. Si Tomcat ou Jetty sont trop lourds pour vous, considérez Winstone ou TTiny .

0
Michael Borgwardt