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**
版本。
如果您没有安装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>
此外,即使课程在标准包中,也是一种很好的做法,明确地导入了它们,以使其更加清晰,更幻想地了解。
com.sun.net.httpserver.HttpServer
这是JDK提供的HTTP服务器API。此API允许您在不使用第三方库或外部Web服务器的情况下在Java中创建Web服务器。 HttpServer
类代表Web服务器本身,负责管理输入和输出连接以及相应处理程序的请求的路由。>>>>>>>>
java.io.IOException
此导入是必要的,因此Incorporated HTTP服务器可以启动 IOException
的例外。这是因为服务器需要创建一个(套接字)才能收听输入连接。但是,创建套接字时可能存在问题,例如连接中的故障,使用的门或其他错误。当孩子的创建中发生错误时,异常 IOException
是启动的。此例外是一个例外,这意味着该课程需要以某种方式处理它(如先前的答案所示)。
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服务器的新知识。喜欢在下面分享您的想法和评论。在下一个! ð