我希望在我的 Java Swing 应用程序中嵌入一个非常轻量级的 HTTP 服务器,它只接受请求、执行一些操作并返回结果。
是否有一个非常轻量级的 Java 类可以在我的应用程序中使用,它在指定端口上侦听 HTTP 请求并让我处理请求?
请注意,我不是在寻找一个独立的 HTTP 服务器,只是一个可以在我的应用程序中使用的小型 Java 类。
我希望在我的 Java Swing 应用程序中嵌入一个非常轻量级的 HTTP 服务器,它只接受请求、执行一些操作并返回结果。
是否有一个非常轻量级的 Java 类可以在我的应用程序中使用,它在指定端口上侦听 HTTP 请求并让我处理请求?
请注意,我不是在寻找一个独立的 HTTP 服务器,只是一个可以在我的应用程序中使用的小型 Java 类。
从 Java 6 开始,JDK 包含一个简单的HTTP 服务器实现。
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();
}
}
}
或者您可以为此目的使用Jetty 。它非常轻巧,非常适合这个目的。
您可以使用 jetty 作为嵌入式服务器,它的重量相当轻。其他选项是检查这个简单的 java 类来处理 http 请求http://java.sun.com/developer/technicalArticles/Networking/Webserver/。
其他方式是在 Java 6 中,您可以使用 com.sun.net.httpserver.HttpServer
Sun 嵌入式 Web 服务器很有用,但 com.sun.net 包可能会被丢弃,恕不另行通知。更好的选择是
如果您不使用 Java 6,那么我当然会推荐Jetty。这工作得很好,并且有一个不错的编程接口。
你说了两次“非常轻”,所以我认为JLHTTP可能很适合你。您可以将其嵌入为单个源文件或 ~35K/50K jar 文件,但它支持开箱即用的 HTTP 服务器中所需的大多数功能。
免责声明:我是作者。但是自己检查一下,看看你的想法:-)