java - JVM 如何对用户的请求使用react

标签 java servlets jvm

让我们以嵌入到某个 tomcat 容器中的 spring 应用程序为例。我知道 spring 在它的掩护下使用 servlet,但我想从 JVM 的角度了解它的内部工作原理。什么直接与 JVM 通信?

独立的“静态”应用程序案例很简单,因为代码被编译一次,字节码由 JVM 解释/由 JIT 编译,类被加载并且与外界没有交互 - 我们可以说应用程序是“调用一次”何时开始。

但是当涉及到可以与用户进行一些交互等的应用程序时,使用 spring 循环运行,JVM 如何知道某些方法是通过请求(即“localhost:8080/users”)调用的? JVM 正在监听某个端口?从套接字读取?哪个组件负责它?

如果能写出从应用程序启动、用户请求到与 JVM 交互以及其中发生的情况的整个路径,我将非常感激。

最佳答案

首先,您的问题非常宽泛,不适合 StackOverflow。

简而言之,JVM 与任何其他操作系统进程没有什么特殊之处。您(或您的供应商)编写 Java/C/Go/Python/任何监听套接字的代码。

当传入的网络请求到来时,操作系统“通知”进程(您正在运行的程序)有新数据,以便它可以解释它并以任何它想要的方式使用react(例如将用户数据保存到数据库中,返回正确的响应)。

用于与操作系统特定设施(如套接字)进行交互的 Java/JVM 代码是用 native 代码(即 C/C++)编写的,并由 JVM 提供给您的 Java通过包装器(“ native 方法”)进行编程。 例如,有一个内部 PlainSocketImpl.java 类,其中包含在相应 PlainSocketImpl.c native 代码中实现的一堆 native 方法: https://github.com/AdoptOpenJDK/openjdk-jdk14/blob/master/src/java.base/unix/native/libnet/PlainSocketImpl.c (例如 socketAccept 实现: https://github.com/AdoptOpenJDK/openjdk-jdk14/blob/master/src/java.base/unix/native/libnet/PlainSocketImpl.c )

我建议你找到一个关于通用套接字编程的好资源;您可能会发现这些很有用:

关于java - JVM 如何对用户的请求使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60694147/

相关文章:

java - 阶乘程序没有给出正确的输出

java - 无法解析 JSP 和 Servlet 中的 getException() 方法

java - Jersey:将值从 ContainerRequestFilter 传递到端点

java - String.intern() 显示奇怪的结果,它是如何工作的

java - 一个Java应用程序是如何配备的?

java - android中的弱引用/异步任务模式

java - JSF 应用程序为子上下文提供 404

java - 如何在启动时在 JVM 中预加载 Web 应用程序类?

java - 当定义为基类时,调用扩展类对象中的基类方法

java - ServletContext.getResourceAsStream 返回 null