繁体   English   中英

web 服务器在本地 web 应用程序中的用途是什么?

[英]What is the purpose of web server in a local web application?

我敢肯定这听起来很傻,但对于像我这样的初学者来说,这是在煮我的大脑,如果不清除它,我就无法继续我的任务。

假设我正在构建一个简单的 java 命令行计算器应用程序,该应用程序将 2 个数字和一个运算符作为输入并将运算结果返回给用户。 现在,我想在它之上构建 GUI(类似于在线计算器)。 为此,我决定构建一个 web 应用程序,以便我可以在浏览器上打开该应用程序并无缝使用它。 它导致我脑海中出现以下问题

  1. 我是否必须在 java 中构建 web 服务器以允许前端/GUI 和后端之间的通信? 没有与任何其他网络的通信,它是严格本地的; 但是我必须创建一个 web 服务器来完成这项工作,这让我感到困惑。 或者我需要一个,因为我决定构建一个 web 浏览器中打开的web应用程序? 还是完全是其他原因?
  2. 如果我决定构建一个 windows/android/mac/ios 应用程序,我还会烘烤一个 web 服务器进行通信吗? 或者我可以使用类似swings的东西(我知道它真的很原始)来做到这一点,这基本上可以让GUI直接与业务逻辑通信?
  3. 我知道像 javascript 这样的前端语言允许我自己编写整个计算器,因此不需要 web 服务器。 但是,如果我使用后端数据库(如 spotify)构建相对复杂的应用程序怎么办? (在应用程序不需要与其他应用程序通信并且所有数据都存储在本地的相同约束内)这个解决方案仍然有效吗?

简而言之,我无法理解构建整个客户端-服务器基础架构的目的,即使整个事情都是本地和离线的(如果这有意义的话?)。 还是我对客户端-服务器的基本理解有缺陷?

如果您想使用 web 浏览器作为与您的 Java 应用程序交互的工具,那么您需要一个 web 服务器。 浏览器只是一个尝试与另一个应用程序建立网络连接的应用程序,并传递一些由 HTTP 协议定义的文本。

为此,您可以选择三种方案:

  • 编写一个接受网络连接、处理 HTTP 并返回响应的应用程序。
  • 编写一个 Java 应用程序,该应用程序使用 Java 18 及更高版本中内置的非常基本的 web 服务器 请注意,此 web 服务器并非旨在成为功能丰富或商业级服务器。
  • 编写一个在带有 web 服务器的 Servlet 容器之上运行的Jakarta Servlet class。 For your needs, either Apache Tomcat or Eclipse Jetty would work well as both the Servlet container and the web server.

对于您的方案,使用 Java JEP 408 的中间选项似乎最合适和最简单。

你说:

没有与任何其他网络的通信,它是严格本地的; 但是我必须创建一个 web 服务器来完成这项工作,这让我感到困惑。

边境牧羊犬在放羊。 这是它最基本的核心使命。 这些羊可以在山脉的山丘上放牧,也可以在您自己的农场内当地放牧。

web 浏览器建立网络连接。 这是它最基本的核心使命。 这些网络连接可以通过实际网络进行,也可以在单台计算机(“本地主机”)中本地进行。

你说:

或者我需要一个,因为我决定构建一个 web 浏览器中打开的 web 应用程序?

是的,根据定义,由 web 浏览器访问的 web 应用程序需要 web 服务器。

你说:

如果我决定构建一个 windows/android/mac/ios 应用程序,我还会烘烤一个 web 服务器进行通信吗?

或者我可以使用秋千之类的东西(我知道它真的很原始)

Swing 没有任何“原始”。 它是一个完全开发的功能丰富的 GUI 框架。 Swing 内置在每个 JDK 中。 Swing 将在未来多年内得到支持。

但是,Swing 的设计和功能可能适合您的口味,也可能不适合您的口味。 Swing 现在处于维护模式。

另一种方法是JavaFX ,现在作为 OpenJFX 库积极开发。

要使用 JavaFX,您必须将OpenJFX库添加到您的项目中,或者部署到与 OpenJFX 库( ZuluFX 、LibericaFX 等)捆绑在一起的 JDK。

这样做本质上将允许 GUI 直接与业务逻辑通信?

是的,GUI 和您的计算器业务逻辑都是简单的 Java 类,所有对等点,都在同一个 JVM 中一起运行。

你说:

我知道像 javascript 这样的前端语言允许我自己编写整个计算器,因此不需要 web 服务器。

是的。 您可以编写 JavaScript 代码来实现您的小计算器。 此 JavaScript 可以放置在具有 web 页面的 HTML 的文件的文本中。 web 浏览器可以在本地打开该 web 页面文件。 您的 HTML 和 JavaScript 将呈现。 在这种情况下不需要 web 服务器。

但是这种情况消除了 Java,并且您说您想要 (a) 在 Java 中编写您的计算器,并且 () 使用 web 浏览器。 所以我们 go 回到上面列出的三个选项。

你说:

但是,如果我使用后端数据库(如 spotify)构建相对复杂的应用程序怎么办? (在应用程序不需要与其他应用程序通信并且所有数据都存储在本地的相同约束内)这个解决方案仍然有效吗?

是的,您可以在本地计算机上部署数据库服务器。 然后您可以找到并使用 JavaScript 绑定工具与该数据库对话。

但是,您将不会使用 Java 及其所有优点。 对于这种情况,我会选择编写一个 JavaFX 应用程序,其中包含基于 Java 的嵌入式数据库引擎,例如H2 这将产生一个单一的多合一可双击应用程序解决方案。

但这将是我根据自己的喜好和技能做出的选择。 其他人可能会选择其他解决方案。

构建整个客户端-服务器基础架构的目的,即使整个事物都是本地和离线的

“离线”部分可能会分散您的注意力。

具有现代操作系统(例如 macOS、BSD、Linux、Windows 等)的传统计算机始终“在线”,因为它们都维护着一个网络堆栈。 该网络堆栈可以由一台计算机内的进程在本地使用以相互通信。 无论您碰巧插入了以太网电缆,还是打开了 WiFi,对计算机都没有什么影响。 无论外部网络访问如何,操作系统中的网络堆栈仍然可用且处于活动状态。

因此,客户端-服务器体系结构单台计算机中的运行效果与在计算机之间的运行方式一样好。 (实际上,它在本地运行得更快,因为在网络上跳来跳去非常慢。)

为什么要为本地应用选择客户端-服务器架构? 任何一个:

  • 您精通并喜欢用于客户端-服务器架构的工具。
  • 您希望最终从仅限本地转向联网。

如果这两个都不成立,那么我提到的带有 H2 解决方案的 JavaFX 可能更适合 Java 程序员。


顺便说一句,让我插入一个Vaadin Flow插件,这是一个 GUI 框架,用于在纯 Java 中构建 web 应用程序。

如果您不想要任何这些安全性和所有..那么单独的网络服务器不需要在本地系统中托管。

@Mark 是的 Tomcat 也是一种网络服务器,只是为了简单理解,我使用了 tomcat 这个词,因为它非常熟悉

即使使用嵌入式 tomcat 应用程序,您也可以托管您的应用程序。 但是,使用网络服务器的主要目的是设置您的反向代理,以便您的应用程序不会被暴露,并且您的网络服务器将充当外部请求的端点。

如果在本地网络服务器中托管应用程序根本不需要网络服务器,那么当您的应用程序托管在生产环境中时,它会派上用场。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM