我怎样才能看到 Tomcat 在 Servlet 和网络方面做了什么

How can I see what Tomcat is doing with respect to Servlets and the network side

目前,我正在学习 Java 网络开发。

其中很多对我来说似乎只是配置,我觉得我的理解很肤浅,因为我只看到了配置(即在 web.xml 文件中定义你的 servlet 及其映射,自定义Servlets通过扩展HttpServletclass,在main方法中实例化Tomcat等)

我想知道更多关于引擎盖下实际发生的事情 - 所以我需要一些指导。

为此,我粗略阅读了 Tomcat 和以下 link 中的 servlet:

所以我 认为 我从中了解到 servlet 位于 Tomcat 实例(一个 servlet 容器)中,并且 Tomcat 处理所有接收客户端的所有请求并将它们转发给 servlet。 servlet 处理请求,发回响应,Tomcat 然后将响应发回客户端。我想在我的本地设置中,我的机器将同时充当客户端和服务器。

鉴于以上我想知道:

  1. 如何直接查看和监控客户端向Tomcat发送请求并验证Tomcat是否收到了请求?本质上,由于 Tomcat?
  2. 的一些实施,我如何验证网络方面的事情正在发生
  3. Tomcat如何解析请求信息并将其发送给 servlet?
  4. Tomcat 是 servlet 容器还是网络服务器?这些是一回事吗?
  5. 在第二个 link 给出的关于嵌入式与非嵌入式的答案中,答案指出嵌入式服务器看起来像一个常规的 java 程序。这是否意味着对于嵌入式服务器,服务器在 java 应用程序中,而在非嵌入式情况下 Web 应用程序在服务器内部?好像包容关系是反转?遏制在这里首先意味着什么?

对于众多问题深表​​歉意,感谢您帮助澄清。

2。 Tomcat如何解析请求信息并将其发送给servlet?

Servlet specification 对此进行了详细解释。该规范非常容易阅读;我建议试一试。

作为简化概述……

Servlet 容器的工作是处理传入的请求,这只是一堆文本。 Servlet容器把各个部分拉出来组装成一个请求对象。

同样,您的 servlet 产生的响应被打包为一个响应对象。 Servlet 容器的工作是使用该对象中包含的所有信息来创建要发送回客户端 Web 浏览器的文本流。

Servlet 容器的全部意义在于让编写 servlet 的程序员无需了解 HTTP 的许多细节以及如何制作服务器。 Servlet 容器完成所有这些工作。换句话说,Servlet 技术的伟大之处在于,你这个程序员不需要问你这个 #2 问题!

3。 Tomcat 是 servlet 容器还是 web 服务器?这些是一回事吗?

(a) 都有,(b) 没有。

不是,servlet容器和web服务器是两种不同的软件。

Web 服务器处理:

  • 侦听来自客户端(网络浏览器等)的传入连接
  • 将响应发送回客户端

网络服务器处理所有网络流量。

Servlet 容器提供了一个环境,其中相对较小的代码块 (servlet) 可以处理请求并制定响应。小型 servlet 不必处理网络流量、启动和关闭、安全以及完整服务器的所有其他职责。这解释了“Servlet”中的“-let”。您编写的 servlet 插入到一个容器中,该容器完成成为服务器所需的大部分繁重工作。

有些产品,例如Tomcat & Jetty,可以由一个网络服务器和一个Servlet容器组成。

Tomcat 主要由三个组件组成:(1) Catalina,一个 servlet 容器,(2) Coyote,一个 Web 服务器,以及 (3) Jasper,一个 Jakarta Server Pages 处理器。参见 Wikipedia

对于大多数人的需要,Tomcat 中的 Coyote 网络服务器是合适的网络服务器。因此,您可以将 Tomcat 用作一体化应用服务器,同时处理 Web 流量和 servlet。

[web request] ➜ [Tomcat Coyote] ➜ [Tomcat Catalina] ➜ [your servlet]

或者,有些人选择仅将 Tomcat 用作 Servlet 容器,位于单独的 Web 服务器(例如 Apache HTTP Server 后面)。在这种情况下,Tomcat 的 Coyote 组件未被使用。相反,单独的 Web 服务器处理客户端浏览器组件,并处理传入的请求。如果请求请求静态资源,Web 服务器会提供它,而不需要 Tomcat 的任何参与。如果请求请求已分配给 servlet 的工作,则单独的 Web 服务器将请求传递给 Tomcat 及其 Catalina 组件。在您的 servlet 生成响应后,响应从 Tomcat 移回外部 Web 服务器,外部 Web 服务器将响应转发到客户端 Web 浏览器。

[web request] ➜ [Apache HTTP Server] ➜ [Tomcat Catalina] ➜ [your servlet]

4 …嵌入式与非嵌入式…

非嵌入式是典型的情况,正如最初发明 Servlet 技术时所设想的那样。

那时候,服务器很少,价格昂贵,而且已经永久存在。 Servlet 技术的目标是让许多 Web 应用程序 运行 彼此并排运行,从而使公司能够轻松地保持那些昂贵的服务器忙碌。

Servlet 技术允许许多不同的 servlet 运行在一台机器上运行而不会相互干扰,并且每个 servlet 的程序员都不知道正在编写的其他 servlet。 Servlet 容器可以在部署和取消部署 servlet 时保持 运行ning。

快进,我们拥有云技术,其中服务器数量众多、价格低廉且便于即时创建和销毁。所以现在很多人都想 运行 他们的 Web 应用程序分开,每个虚拟机或虚拟服务一个 Web 应用程序。因而需要嵌入式模式。我们需要一个可以自行启动和关闭的应用程序,运行 一个特定的 servlet(或多个旨在协同工作的 servlet),无需任何其他不相关的 Web 应用程序。

实现这一新目标的一种方法是将 Web 服务器和 servlet 容器打包到独立的 Java 应用程序中。系统管理员可以像任何其他 Java 应用程序一样启动和退出此独立应用程序,而无需了解如何配置正在进行的 Web 服务器和 Servlet 容器。