Tomcat 初学(一)它是web服务器

227 阅读3分钟

几乎所有的 Java Web 框架(比如 Spring)都是基于 Servlet 的封装,Spring 应用本身就是一个 Servlet,而 Tomcat 和 Jetty 这样的 Web 容器,负责加载和运行 Servlet

Servlet 没有 main 方法,不能独立运行,因此必须把它部署到 Servlet 容器中,由容器来实例化并调用 Servlet。

Tomcat 或者 Jetty 就是一个“HTTP 服务器 + Servlet 容器”

我们也叫它们 Web 容器。其他应用服务器比如 JBoss 和 WebLogic,它们不仅仅有 Servlet 容器的功能,也包含 EJB 容器,是完整的 Java EE 应用服务器。从这个角度看,Tomcat 和 Jetty 算是一个轻量级的应用服务器。

Servlet接口指Servlet容器和具体业务类之间的规范

有接口一般就有抽象类,抽象类用来实现接口和封装通用的逻辑,因此 Servlet 规范提供了 GenericServlet 抽象类,我们可以通过扩展它来实现 Servlet。虽然 Servlet 规范并不在乎通信协议是什么,但是大多数的 Servlet 都是在 HTTP 环境中处理的,因此 Servet 规范还提供了 HttpServlet 来继承 GenericServlet,并且加入了 HTTP 特性。这样我们通过继承 HttpServlet 类来实现自己的 Servlet,只需要重写两个方法:doGet 和 doPost。

Filter 是干预过程的,它是过程的一部分,是基于过程行为的。

Listener 是基于状态的,任何行为改变同一个状态,触发的事件是一致的。

1.Servlet规范:Servlet和Servlet容器的一整套规则 2.Servlet和Servlet的出现是为了解耦http服务器和业务逻辑 3.ServletRequest和ServletResponse对象是对通信协议的封装 4.Servlet接口有5个方法,其中包括生命周期函数两个:init和destroy;获取信息的函数两个:getServletConfig和getServletInfo;还有一个就是业务逻辑处理方法:service 5.一个ServletContext接口对应一个web应用,它持有web应用中的所有servlet,所以可以通过它来实现请求在Servlet之间的转发 6.Servlet容器的扩展机制:Filter接口和Listener接口,前者是基于过程的,后者是基于状态的

Servlet容器,是用于管理Servlet生命周期的。 Spring容器,是用于管理Spring Bean生命周期的。 SpringMVC容器,适用于管理SpringMVC Bean生命周期的。

Tomcat/Jetty启动,对于每个WebApp,依次进行初始化工作: 1、对每个WebApp,都有一个WebApp ClassLoader,和一个ServletContext 2、ServletContext启动时,会扫描web.xml配置文件,找到Filter、Listener和Servlet配置

3、如果Listener中配有spring的ContextLoaderListener 3.1、ContextLoaderListener就会收到webapp的各种状态信息。 3.3、在ServletContext初始化时,ContextLoaderListener也就会将Spring IOC容器进行初始化,管理Spring相关的Bean。 3.4、ContextLoaderListener会将Spring IOC容器存放到ServletContext中

4、如果Servlet中配有SpringMVC的DispatcherServlet 4.1、DispatcherServlet初始化时(其一次请求到达)。 4.2、其中,DispatcherServlet会初始化自己的SpringMVC容器,用来管理Spring MVC相关的Bean。 4.3、SpringMVC容器可以通过ServletContext获取Spring容器,并将Spring容器设置为自己的根容器。而子容器可以访问父容器,从而在Controller里可以访问Service对象,但是在Service里不可以访问Controller对象。 4.2、初始化完毕后,DispatcherServlet开始处理MVC中的请求映射关系。