32 votes

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 demandes, 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é les requêtes Http et me permet de gérer les requêtes?

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

70voto

Ivan Dubrov Points 2596

Étonnamment, Sun JDK contient déjà un simple serveur http de mise en œuvre (à partir du JDK 6). Voir La 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 très léger et parfaitement adapté à cette fin.

8voto

Bhushan Bhangale Points 6284

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

Vous pouvez également utiliser Java 6 pour utiliser com.sun.net.httpserver.HttpServer

3voto

daitangio Points 441

Soleil serveur web intégré est utile, mais com.sun.net package peut être supprimée sans préavis. Une meilleure alternative

1voto

Brian Agnew Points 143181

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X