Serveur HTTP intégré dans L'application Swing Java

Je souhaite intégrer un serveur HTTP très léger dans mon application java swing qui accepte simplement les requêtes, effectue certaines actions et renvoie les résultats.

Existe-t-il une classe java Très légère que je peux utiliser dans mon application qui écoute sur un port spécifié pour les requêtes Http et me permet de gérer les requêtes?

Notez que je ne cherche pas un serveur http autonome, juste une petite classe java que je peux utiliser dans mon application java.

31
demandé sur Steve Melnikoff 2009-07-27 07:47:17

5 réponses

Étonnamment, Sun JDK contient déjà une implémentation de serveur http simple (uniquement à partir du JDK 6). Voir JavaDoc

Utilisation:

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Executors;

import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class HttpServerDemo {
  public static void main(String[] args) throws IOException {
    InetSocketAddress addr = new InetSocketAddress(8080);
    HttpServer server = HttpServer.create(addr, 0);

    server.createContext("/", new MyHandler());
    server.setExecutor(Executors.newCachedThreadPool());
    server.start();
    System.out.println("Server is listening on port 8080" );
  }
}

class MyHandler implements HttpHandler {
  public void handle(HttpExchange exchange) throws IOException {
    String requestMethod = exchange.getRequestMethod();
    if (requestMethod.equalsIgnoreCase("GET")) {
      Headers responseHeaders = exchange.getResponseHeaders();
      responseHeaders.set("Content-Type", "text/plain");
      exchange.sendResponseHeaders(200, 0);

      OutputStream responseBody = exchange.getResponseBody();
      Headers requestHeaders = exchange.getRequestHeaders();
      Set<String> keySet = requestHeaders.keySet();
      Iterator<String> iter = keySet.iterator();
      while (iter.hasNext()) {
        String key = iter.next();
        List values = requestHeaders.get(key);
        String s = key + " = " + values.toString() + "\n";
        responseBody.write(s.getBytes());
      }
      responseBody.close();
    }
  }
}

, Ou vous pouvez utiliser Jetée à cette fin. Il est assez léger et correspond parfaitement à cet objectif.

67
répondu Ivan Dubrov 2014-09-20 06:19:26

Vous pouvez utiliser jetty comme serveur embarqué, son poids assez léger. Une autre option est de vérifier ceci pour une simple classe java pour gérer les requêtes http http://java.sun.com/developer/technicalArticles/Networking/Webserver/.

L'autre façon est en Java 6 Vous pouvez utiliser com. sun. net. httpserver. HttpServer

8
répondu Bhushan Bhangale 2009-07-27 04:30:11

Sun embedded Web server est utile, mais com.sun.net paquet pourrait être abandonné sans préavis. Une meilleure alternative sont

3
répondu daitangio 2014-04-11 08:34:05

Si vous n'utilisez pas Java 6, Alors je recommanderais certainement Jetty . Cela fonctionne très bien et a une interface de programmation décente.

1
répondu Brian Agnew 2009-07-27 08:56:57

Vous avez dit "très léger" deux fois, donc je pense que JLHTTP pourrait être un bon match pour vous. Vous pouvez l'intégrer comme un fichier source unique ou un fichier jar ~ 35K / 50K, mais il prend en charge la plupart des fonctionnalités dont vous auriez besoin dans un serveur HTTP prêt à l'emploi.

Avertissement: je suis l'auteur. Mais vérifiez - le par vous-même et voyez ce que vous pensez: -)

1
répondu amichair 2016-02-26 14:31:07