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

icomxhvb  于 2023-01-24  发布在  Java
关注(0)|答案(1)|浏览(94)

目前,我正在学习Java Web开发。
对我来说,其中很多似乎只是配置,我觉得我的理解是肤浅的,因为我只看到了配置(即在web.xml文件中定义Servlet及其Map,通过扩展HttpServlet类创建自定义Servlet,在main方法中示例化Tomcat,等等)。
我想知道更多关于引擎盖下实际发生的事情-所以我需要一些指导。
为此,我通过以下链接粗略地阅读了Tomcat和servlet:

因此,我认为我从中了解到的是,servlet位于Tomcat示例内部(一个servlet容器)和Tomcat处理所有的接收客户端的所有请求并将它们中继到servlet。servlet处理请求,发送回响应,然后Tomcat将其发送回客户端。我想在本地设置中我有,我的机器将同时充当客户端和服务器。
鉴于上述情况,我想知道:
1.如何直接查看和监控客户端向Tomcat发送请求,并验证Tomcat是否收到请求?本质上,如何验证由于Tomcat的某些实现,网络方面的事情正在发生?

  1. Tomcat如何解析请求信息并将其发送给servlet?
  2. Tomcat是一个servlet容器还是一个web服务器?它们是一回事吗?
    1.在第二个链接中给出的关于嵌入式与非嵌入式的答案中,答案指出嵌入式服务器看起来像一个普通的java程序。这是否意味着对于嵌入式服务器,服务器在java应用程序中,而在非嵌入式情况下,web应用程序在服务器内部?就像包容关系是颠倒的?包容在这里首先意味着什么?
    抱歉的众多问题,并感谢您帮助澄清。
vwkv1x7d

vwkv1x7d1#

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

Servlet specification详细解释了这一点,它的规范非常容易阅读;我建议你试一试。
作为一个简单的概述...
Servlet容器的工作是处理传入的请求,请求只是一堆文本,Servlet容器从中取出各个部分,并将它们组装成请求对象。
同样,servlet产生的响应被打包成一个响应对象,Servlet容器的任务是使用该对象中包含的所有信息创建一个文本流,然后发送回客户端Web浏览器。
Servlet容器的全部意义在于使编写Servlet的程序员不必了解HTTP的许多细节以及如何创建服务器。Servlet容器完成了所有这些工作。换句话说,Servlet技术的伟大之处在于,作为程序员,你不必问你的第二个问题!

3. Tomcat是servlet容器还是web服务器?它们是一回事吗?

(a)两者,(b)否。
不,servlet容器和web服务器是两种不同的软件。
Web服务器处理:

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

Web服务器处理所有网络流量。
Servlet容器提供了一个环境,在这个环境中,相对较小的代码块(Servlet)可以处理请求并制定响应。小Servlet不必处理网络流量、启动和关闭、安全性以及完整服务器的所有其他职责。这就是“Servlet”中的“-let”的原因。
您编写的Servlet插入Servlet容器中。容器与Web服务器通信,接收Web服务器传递的每个请求,并将Servlet生成的响应传递给Web服务器。请求到达时,容器将调用Servlet。
您的servlet完全不知道运行的是哪个Servlet容器实现,只要它符合 Jakarta Servlet 规范即可。您的servlet完全不知道Web服务器的存在。
有些产品,比如Tomcat & Jetty,可以由一个Web服务器和一个Servlet容器组成。
Tomcat主要由三个组件组成:(1) Catalina ,一个servlet容器,(2)Coyote,一个Web服务器,(3)碧玉,一个Jakarta服务器页处理器。请参见Wikipedia
对于大多数人的需求,Tomcat中的 Coyote Web服务器是一个合适的Web服务器。因此,您可以将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 request] ➜ [Apache HTTP Server] ➜ [Tomcat Catalina] ➜ [your servlet]

4...嵌入式与非嵌入式...

非嵌入式是典型的情况,正如最初发明Servlet技术时所设想的那样。
当时,服务器数量少、价格昂贵,而且已经永久性地部署在服务器上,Servlet技术的目标是让许多Web应用程序同时运行,从而使公司能够轻松地让这些昂贵的服务器保持忙碌。
Servlet技术允许许多不同的Servlet在一台机器上运行,而不会相互影响,每个Servlet的程序员也不知道正在编写的其他Servlet的任何信息。Servlet容器可以在部署和取消部署Servlet时保持运行。
随着时间的推移,我们有了云技术,服务器数量众多,价格低廉,而且可以方便地在运行中创建和销毁。所以现在很多人希望单独运行他们的Web应用程序,每个虚拟机或虚拟服务一个Web应用程序。因此需要嵌入式模式。我们需要一个可以自己启动和关闭的应用程序,运行一个特定的servlet(或多个一起工作的servlet)而不运行任何其他不相关的web应用程序。
实现此新目标的一种方法是将Web服务器和Servlet容器打包到独立Java应用程序中。系统管理员可以像启动和退出任何其他Java应用程序一样启动和退出此独立应用程序,而无需了解如何配置正在运行的Web服务器和Servlet容器。

相关问题