如何在没有框架的情况下创建Java Web服务器
#java #webserver #javac

olth,我希望您是我想通过在技术上开始学习的一件事,就是了解事物在工具的最基本工具中的工作方式,即在没有框架的帮助的情况下构建了一些东西。因此,我对什么是框架和工具本地的东西有很好的佣金。

这里的提案正在创建和配置使用Java语言的简单后端服务器的设计,该服务在本地环境中运行,并具有打印Hello,World!的get路线。此外,这个想法是将尝试使用更基础和本地的服务器编码,并了解项目中每个工具或配置的变化。

哪些妓女?

开始,因为我想要其他工具的丝毫可能的援助,我不会选择IDE Java,因为该软件会在初始配置的这一部分中对我有所帮助,而不是让我自由地旅行石头的道路是我的预言。因此,我将使用的文本编辑器是Visual Studio代码。

选择VS代码的选择不受我最喜欢的编辑器的影响,而是因为我需要一种帮助我母亲的工具,但这仍然使这个过程运行。与使用记事本不同,该记事本不显示在终端上运行的编辑器的关键字或VI或Nano,我特别难以在代码之间导航。

除了文本编辑器外,我还需要JDK。 Java开发套件的首字母缩写词包括开发人员用来创建Java应用程序的工具集。其中包括编译器,净化器,已记录和其他工具。

要知道您是否在母亲中安装了JDK,在终端运行命令

java -version
javac -version

在左边,您应该看到类似的东西,改变了已安装的Java的版本。对于这个项目,我正在使用Java的**11.0.7**版本。

Image description

如果您没有安装JDK,则可以将其降低并从官方的Oracle或OpenJDK网站上安装。

熟悉Java

通过配置所有内容,我将通过创建一个打印Hello,World的文件来进行小型测试!

在项目的方向上,我将创建项目字体文件将在其中以及在其中的**Main.java**文件中创建**src**文件夹。请注意,文件扩展名为**.java**,这表明它是一个源文件,即程序员将写入方式本身的文件。在此文件中,我将创建带有相同名称的类,而整个**main**

public class Main {
  public static void main(String[] args) {

        String greeting = "Hello, World!";
    System.out.println(greeting);
  }
}

omâ©todo public static void main(String[] args)
Java是Java中任何程序的切入点。从命令行或IDE运行Java程序时,首先执行的整体。在编程中,类似的功能与此相似,称为***** ** ** 入口点。 ** ** *****

使用创建的代码,下一步是编译。为此,通过终端浏览项目文件夹并运行以下命令:

javac src/Main.java

如果在终端上没有休假,则朝向src的方向是我们在Java中程序的字节码。字节码是用Java Virtual Machine(JVM)解释的中间语言编译的Java程序的一种方式。

现在,要执行我们的程序,我们使用命令:

java -cp src Main

Metro -cp 指定类路径,即JVM应该在该程序中查找程序引用的类。在这种情况下,我们指定“ SRC”文件夹包含程序类。

开演时间

在所有准备工作,测试和工作时,我们都可以晋升到服务器本身的部分。为此,我们将不得不进行3个Java区的进口。

import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.net.InetSocketAddress;

public class Main {
  public static void main(String[] args) {

        String greeting = "Hello, World!";
    System.out.println(greeting);
  }
}

您需要使这些转移的重要性不包括在Java的标准库中。 koud8 类属于HTTP服务器,该服务器是JDK的一部分,但在所有Java执行环境中都不包含模式。同样, java.io.IOException java.net.InetSocketAddress 是Java标准库的一部分,但是需要进口它们,因为它们在标准软件包中使用,而在标准软件包中没有estânta。 /p>

此外,即使课程在标准包中,也是一种很好的做法,明确地导入了它们,以使其更加清晰,更幻想地了解。

  1. com.sun.net.httpserver.HttpServer

这是JDK提供的HTTP服务器API。此API允许您在不使用第三方库或外部Web服务器的情况下在Java中创建Web服务器。 HttpServer 类代表Web服务器本身,负责管理输入和输出连接以及相应处理程序的请求的路由。>>>>>>>>

  1. java.io.IOException

此导入是必要的,因此Incorporated HTTP服务器可以启动 IOException 的例外。这是因为服务器需要创建一个(套接字)才能收听输入连接。但是,创建套接字时可能存在问题,例如连接中的故障,使用的门或其他错误。当孩子的创建中发生错误时,异常 IOException 是启动的。此例外是一个例外,这意味着该课程需要以某种方式处理它(如先前的答案所示)。

  1. java.net.InetSocketAddress

此导入是必要的,因为 HttpServer 类需要 InetSocketAddress 对象来确定要收听输入连接的端口和地址IP使用。这就是为什么创建对象 InetSocketAddress 是创建Incorporated HTTP服务器的重要一步,因为它指定了Web服务器将在其中“收听”收到的HTTP请求。

请注意,在这里,我们只是为创建Web服务器的基础知识(DECTODEDS)进行了必要的导入。

如所评论的,**IOException枯燥**对于启动例外很重要。在Java中,一个例外是一个代表程序执行期间发生的特殊条件的类。发生错误时,创建并启动了异常类的实例,中断程序的正常执行。例外情况允许程序处理出色的错误和情况。

因此,我们将在入口点签名后使用**throws**的服务器源进行少量更改。 throws 是一份声明,告知整个人可以在执行过程中发起例外。

import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.net.InetSocketAddress;

public class Main {
  public static void main(String[] args) throws IOException {

        String greeting = "Hello, World!";
    System.out.println(greeting);
  }
}
作为步骤,我们必须创建一个代表必须执行服务器的地址和门的实例。为此,我们将使用 InetSocketAddress类。他们中的第一个接收 InetAddress 和许多门的对象,第二个接收一个带有IP地址或主机名和许多端口的字符串。

这是对每个parano仪表的更详细的解释:

  • InetAddress :是代表IP地址的对象。可以通过 InetAddress 类Java获得。使用此Parano时,我们正在指定将在£O Connection中使用的服务器或客户端的IP地址。
  • String :是代表IP地址或主机名的字符串。当我们想从字符串创建 InetSocketAddress 的实例时。例如,如果我们想从“ localhost”字符串创建一个地址,我们可以将此字符串作为一部分传递。
  • int :是一个整数,代表将在连接中使用的门。门用于指定服务器或客户端将使用的通信渠道。

实例化 InetSocketAddress 的对象时,我们需要根据我们想要的东西传递这些部分。

为了使其更具教导性,我宣布了**String**差异与**host**标识符和A int 与Koud35标识符的差异,除了更改我们的旧方差â旧差异。 >

import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.net.InetSocketAddress;

public class Main {
  public static void main(String[] args) throws IOException {

    int port = 8080;
    String host = "localhost";

    String response = "Hello, World!";

    InetSocketAddress address = new InetSocketAddress(host, port)

        System.out.println(response);
    }
}

最后,我们的蛋糕锦上添花,该班级负责创建HTTP服务器。 HttpServer 类,可用于创建在特定和操纵门上倾听的HTTP服务器,输入http,

HttpServer class 提供了一个完整的母亲 create() ,它创建了HTTP服务器实例。整个 create() 接受两个parano仪表:a InetSocketAddress 和a int ,这表明服务器可以同时操纵的母亲的要求。当服务器收到请求时,它会创建一个新线程来操纵请求并释放主线程以处理新请求。

import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.net.InetSocketAddress;

public class Main {
  public static void main(String[] args) throws IOException {

    int port = 8080;
    String host = "localhost";

    String response = "Hello, World!";

    InetSocketAddress address = new InetSocketAddress(host, port)

        HttpServer server = HttpServer.create(address, 0);

        System.out.println(response);
    }
}

现在,我们需要为HTTP服务器创建上下文,指示服务器收到路由“/”(root)的请求时应发生的情况。在HTTP服务器的上下文中,术语“上下文”是指特定URL和必须执行的函数或运动之间的映射,以处理该URL的请求。>>>>>>>>

import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.net.InetSocketAddress;

public class Main {
  public static void main(String[] args) throws IOException {

    int port = 8080;
    String host = "localhost";

    String response = "Hello, World!";

    InetSocketAddress address = new InetSocketAddress(host, port)

        HttpServer server = HttpServer.create(address, 0);

        server.createContext("/", (exchange -> {}));

        System.out.println(response);
    }
}

server.createcontext(“/”,(Exchange-> {...})为root URL(“/”)创建上下文,并定义了lambda函数以处理针对此URL的请求。 Java中的Lambda是代表矮函数的表达式,可以将其作为整体参数传递或归因于方差。

关键字 exchange 表示客户与服务器之间的信息交换。 lambda函数接收此对象 exchange 作为parano,并且可以从中访问和操纵请求和响应的数据。

使用创建的上下文,我们需要应用一些配置来定义响应的格式。

import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.net.InetSocketAddress;

public class Main {
  public static void main(String[] args) throws IOException {

    int port = 8080;
    String host = "localhost";

    String response = "Hello, World!";

    InetSocketAddress address = new InetSocketAddress(host, port)

        HttpServer server = HttpServer.create(address, 0);

        server.createContext("/", (exchange -> {

            exchange.getResponseHeaders().set("Content-Type", "text/plain");
            exchange.sendResponseHeaders(200, response.getBytes().length);
      exchange.getResponseBody().write(response.getBytes());
      exchange.close();
        }));

        System.out.println(response);
    }
}

在lambda函数中,首先使用 set() getResponseHeaders()

接下来,该代码使用全部 koud48 koud49 和<强> exchange write()

对象。

最后,整个 close() 被要求结束客户与服务器之间的信息交换。

最后,我们需要初始化我们的Web服务器。整个 server.start() 负责启动HTTP服务器。这位母亲©all的呼叫后,服务器开始听到指定门和主机收到的请求。

最后一行, System.out.println("Servidor iniciado em http://localhost:8080/"); ,在控制台上显示一条消息,通知用户服务器已成功启动并执行了哪些URL。此消息仅有用,并且不会干扰服务器操作。这是一种表明服务器准备接收请求的享受的方法。

import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.net.InetSocketAddress;

public class Main {
  public static void main(String[] args) throws IOException {

    int port = 8080;
    String host = "localhost";

    String response = "Hello, World!";

    InetSocketAddress address = new InetSocketAddress(host, port)

        HttpServer server = HttpServer.create(address, 0);

        server.createContext("/", (exchange -> {

            exchange.getResponseHeaders().set("Content-Type", "text/plain");
            exchange.sendResponseHeaders(200, response.getBytes().length);
      exchange.getResponseBody().write(response.getBytes());
      exchange.close();
        }));

        server.start();
    System.out.println("Servidor iniciado em http://" + host + ":" + port + "/");
    }
}

最终考虑

简而言之,该项目在Door 8080和“ Localhost”主机上创建了一个简单的HTTP服务器。为root URL“/”制作http get时,服务器响应文本“ hello

世界!”。

母亲main()负责启动服务器并定义root URL“/”的上下文。在上下文中,定义了处理收到的HTTP请求的lambda函数。在此功能中,定义了答案的遏制类型为“文本/平原”,答案的状态为200(ok),答案的正文是文本“ Hello World!”最后,答案已发送给客户并关闭了连接。

最后,启动了服务器,并在控制台上显示一条消息,以告知服务器的执行服务器。

在本文中,我们看到了如何在不使用任何框架的情况下创建简单的Web服务器。只需几行,就可以创建一个接收HTTP请求的服务器并使用所需的遏制响应。

尽管可以创建无框架的Java Web服务器,但重要的是要记住,Spring和Spark等框架提供了许多可以加速Web应用程序开发的功能。

如果您想查看我们在本文中创建的Java Web服务器的完整代码,请在github:pure-java-server中查看我的项目。

我希望本文是成绩,并且您已经学到了一些有关创建简单Web服务器的新知识。喜欢在下面分享您的想法和评论。在下一个! ð