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.
5 réponses
Étonnamment, Sun JDK contient déjà une implémentation de serveur http simple (uniquement à partir du JDK 6). Voir JavaDoc
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.
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
Sun embedded Web server est utile, mais com.sun.net paquet pourrait être abandonné sans préavis. Une meilleure alternative sont
- http://tjws.sourceforge.net/ 100kb très petit et JDK 1.6-aware
- http://winstone.sourceforge.net/ plus gros mais un bon coup
- http://www.eclipse.org/jetty/ Jetty, très bon en développement, support SPDY et websocket
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.
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: -)