当前位置: 首页 > 面试题库 >

Swing应用程序中嵌入式HTTP服务器的Java类

柳深
2023-03-14
问题内容

我希望在我的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用于此目的。它非常轻巧,非常适合此目的。



 类似资料:
  • 我有一个很大的swing应用程序,我想把javafx嵌入其中。我多次尝试这样做(通过遵循oracle教程等),但只有在声明一个新的JFrame以使用JFXPanel组件时才成功。但是,我不想使用新的框架,我想将我的Javafx代码合并到swing应用程序的根JFrame中。 我们可以将javaFX组件嵌入到JPanel而不是JFrame中吗?如果答案是肯定的,为什么我没有成功?

  • 但是所有的答案和评论对链接帖子的回应也没有太大帮助

  • 我制作了一个非常基本的web应用程序,它只有一个html页面。我把它当作战争输出。 现在我创建了一个嵌入式jetty服务器。 } 我为这个嵌入式服务器创建了一个jar。但是当我试图通过嵌入式服务器运行我的web应用程序时,我得到以下错误。 C:\users\user>Java-jar C:\users\user\desktop\jetty\webserver.jar null 我使用过jetty

  • 我想用Java创建一个非常简单的HTTP服务器应用程序。 例如,如果我在localhost端口8080上运行服务器,并且从浏览器发出以下调用,我希望获得一个带有字符串“hello world!”的Json数组: 我希望在服务器中有类似这样的东西(非常抽象的代码): 我想这个函数实际上不应该“返回”json,而是使用某种HTTP响应处理程序或类似的东西发送它... 最简单的方法是什么,而不需要熟悉许

  • 我是编码和Java的新手,我已经创建了一个简单的客户端-服务器程序,客户端可以请求一个文件。它的内容将显示在浏览器页面中,还有一些细节,如数据类型和长度。我现在有一个问题,我不确定如何在浏览器中显示正确连接的服务器响应,如“HTTP/1.1 200 OK”和关闭的连接,如“Connection: close”。我有一个处理响应的方法,如下所示: 对我如何做到这一点有什么建议吗?非常感谢。

  • 问题内容: 嗨:我想将i-jetty集成到Android应用程序中,而不要反过来。之前有人包括i-jetty并使其能够在Android 2.1或2.2下运行吗? 问题答案: 对于那些仍然希望这样做的人,我成功地将I-Jetty集成到了我的应用程序中。 所以基本上我要做的是下载i- jetty源代码并将其作为Eclipse中的Maven项目导入。然后,我在父pom.xml中添加了一个模块,该模块指向