如何在普通Java中创建GET端点?

如何在普通Java中创建GET端点?,java,Java,我的目标是学习如何使用普通Java创建GET端点 我的预期结果是:我可以使用浏览器或邮递员发送GET请求 我的实际结果是:localhost:8080拒绝连接。在我发送GET请求后,Java应用程序进程以退出代码0结束 这是我目前正在使用的代码 package httpserver; import httpserver.config.Configuration; import httpserver.config.ConfigurationManager; import java.io.IOE

我的目标是学习如何使用普通Java创建GET端点

我的预期结果是:我可以使用浏览器或邮递员发送GET请求

我的实际结果是:localhost:8080拒绝连接。在我发送GET请求后,Java应用程序进程以退出代码0结束

这是我目前正在使用的代码

package httpserver;

import httpserver.config.Configuration;
import httpserver.config.ConfigurationManager;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class HttpServer {
  public static void main(String[] args) {
    System.out.println("Server starting...");

    ConfigurationManager.getInstance().loadConfigurationFile("src/main/resources/http.json");
    Configuration conf = ConfigurationManager.getInstance().getCurrentConfiguration();

    System.out.printf("Using Port: %s%n" +
            "Using WebRoot: %s%n", conf.getPort(), conf.getWebroot());

    try {
      ServerSocket serverSocket = new ServerSocket(conf.getPort());
      Socket socket = serverSocket.accept();

      InputStream inputStream = socket.getInputStream();
      OutputStream outputStream = socket.getOutputStream();

      String html = "<html>" +
              "<head>" +
              "<title>Simple Java HTTP Server</title>" +
              "</head>" +
              "<body>" +
              "<p>This page was server using my Simple Java HTTP Server</p>" +
              "</body>" +
              "</html>";

      final String CRLF = "\n\r"; // 13, 10

      String response = "HTTP/1.1 200 OK" + CRLF + // Status Line : HTTP_VERSION RESPONSE_CODE RESPONSE_MESSAGE
              "Content-Length: " + html.getBytes().length + CRLF + CRLF + // end of HEADER
              html +
              CRLF + CRLF;

      outputStream.write(response.getBytes());

      inputStream.close();
      outputStream.close();
      socket.close();
      serverSocket.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
封装httpserver;
导入httpserver.config.Configuration;
导入httpserver.config.ConfigurationManager;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.OutputStream;
导入java.net.ServerSocket;
导入java.net.Socket;
公共类HttpServer{
公共静态void main(字符串[]args){
System.out.println(“服务器启动…”);
ConfigurationManager.getInstance().loadConfigurationFile(“src/main/resources/http.json”);
Configuration conf=ConfigurationManager.getInstance().getCurrentConfiguration();
System.out.printf(“使用端口:%s%n”+
“正在使用WebRoot:%s%n”,conf.getPort(),conf.getWebroot();
试一试{
ServerSocket ServerSocket=newserversocket(conf.getPort());
Socket=serverSocket.accept();
InputStream InputStream=socket.getInputStream();
OutputStream OutputStream=socket.getOutputStream();
字符串html=“”+
"" +
“简单Java HTTP服务器”+
"" +
"" +
“此页面是使用我的简单Java HTTP服务器的服务器

”+ "" + ""; 最后一个字符串CRLF=“\n\r”//13,10 String response=“HTTP/1.1 200 OK”+CRLF+//状态行:HTTP\u版本响应\u代码响应\u消息 “内容长度:”+html.getBytes().Length+CRLF+CRLF+//头的末尾 html+ CRLF+CRLF; write(response.getBytes()); inputStream.close(); outputStream.close(); socket.close(); serverSocket.close(); }捕获(IOE异常){ e、 printStackTrace(); } } }
您的代码在第一次连接完成后即告完成。您需要将accept包含在一个循环中,例如:

public class HttpServer {
  public static void main(String[] args) {
    System.out.println("Server starting...");

    ConfigurationManager.getInstance().loadConfigurationFile("src/main/resources/http.json");
    Configuration conf = ConfigurationManager.getInstance().getCurrentConfiguration();

    System.out.printf("Using Port: %s%n" +
            "Using WebRoot: %s%n", conf.getPort(), conf.getWebroot());

    try {
      ServerSocket serverSocket = new ServerSocket(conf.getPort());

      while (true) { // Infinte loop
        Socket socket = serverSocket.accept();

        InputStream inputStream = socket.getInputStream();
        OutputStream outputStream = socket.getOutputStream();


        String response = ...;

        outputStream.write(response.getBytes());
        inputStream.close();
        outputStream.close();
        socket.close();
      }
      serverSocket.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

检查后,发现CRLF反转。应该是
\r\n
。这将进一步帮助您解决问题-