当前位置: 首页 > 知识库问答 >
问题:

如何在没有Spring、JavaEE等web框架的情况下使用Java创建HTTP API?

蒙才
2023-03-14

如何创建一个HTTP API使用Java没有任何Web框架,如Spring,JavaEE?

共有1个答案

宇文弘懿
2023-03-14

HTTP的基础非常简单。打开一个ServerSocket来侦听传入的请求。当建立连接时,启动一个新线程并发送响应。这看起来像是,

public static void main(String[] args) {
    try {
        ServerSocket ss = ServerSocketFactory.getDefault().createServerSocket(8080, 10);
        StringBuilder body = new StringBuilder();
        body.append("<html><body><h1>Hello, World!</h1></body></html>");
        while (true) {
            Socket s = ss.accept();
            Thread t = new Thread(new HttpReply(s, body));
            t.start();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

然后,要真正发送响应,您将从套接字获得一个输出流,然后写入所需的HTTP头和正文。喜欢

class HttpReply implements Runnable {
    private Socket s;
    private StringBuilder body;

    private HttpReply(Socket s, StringBuilder body) {
        this.s = s;
        this.body = body;
    }

    public void run() {
        try {
            PrintStream ps = new PrintStream(s.getOutputStream());
            ps.println("HTTP/1.1 200 OK");
            ps.println("Date: Mon, 27 Jul 2009 12:28:53 GMT");
            ps.println("Server: Java");
            ps.println("Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT");
            ps.println("Content-Length: " + body.length());
            ps.println("Content-Type: text/html");
            ps.println("Connection: Closed");
            ps.println();
            ps.println(body);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

它将在机器的端口8080上监听请求,并用一个基本的hello world网页进行回复。

 类似资料:
  • 如何在没有Spring、JavaEE等web框架的情况下使用Java创建HTTP API?

  • 我正在玩grpc 有人成功使用进行生产吗?我们需要包括特使在内的所有依赖项吗?

  • 问题内容: 我刚刚开始使用Python,我想知道如何在不需要框架的情况下对Web应用程序进行编程。我是一位经验丰富的PHP开发人员,但是我有尝试Python的冲动,而且我通常喜欢从头开始编写,而没有受到flask和django等框架的限制。 问题答案: WSGI是Web服务器接口的Python标准。如果要创建自己的框架或在没有框架的情况下运行,则应进行研究。特别是,我发现Ian Bicking的D

  • 我正在尝试使用Poc为我们的项目创建一个侦探应用程序,以便使用Spring mvc(即没有Spring Boot)进行日志记录。我无法在网络上找到我的mvc文档/材料。 那么,如何创建Tracer、spanbean并注入记录器以进行日志记录呢?

  • < sub >(我已经知道了答案,但是因为我经常发现自己在重新寻找答案,所以我把它贴在这里作为自己和他人的文档。这是Stackoverflow上鼓励的。) 许多 Servlet 开发人员都读过《Head First Serlet》一书 在Servlet 2.4及更低版本中,web.xml用于完全配置Web应用程序。但是更高版本似乎有其他方法来配置Web应用程序,无需触及web.xml和注释。例如,

  • 我正在遵循Oracle的教程在JavaFX中创建TableView。在这个截图中,我复制并粘贴了代码,发现了几个错误,教程中没有提到这些错误。 TableView上的警告显示: TableView是原始类型。对泛型类型TableView的引用 表列上的警告说: 表列是一个原始类型。对泛型类型TableCol列的引用 addAll方法上的警告是: 类型安全:方法addAll(Object…)属于原始