要想知道他们之间的关系,我们得先搞清楚他们分别是什么?

Servlet容器

介绍Servlet容器的时候顺便复习下Java Web,我们都知道 Java Web 的三大组件:Servlet、Filter、Listener。

  • Servlet:可以理解为是运行在服务端的Java小程序,它负责客户端和服务端的信息交互和处理。但是Servlet中没有main方法,不能独立运行,所以必须存放在Servlet容器中,由Servlet容器去管理Servlet。那么它工作的过程就是:客户端发送请求,传递到Servlet容器,而Servlet将数据转换成服务器端可以处理的数据再发给服务端;当服务端处理完成之后,传递给Servlet容器,Servlet容器将其转换成客户端可以处理的数据交给客户端,这样就完成了数据的交互和处理。
  • Filter:上述的Servlet的作用是处理请求,而Filter的作用是拦截请求和放行,在拦截请求后可以修改request和response,实现我们想实现的功能。注意,它不能产生一个请求或者响应,只是能对请求或者响应进行拦截。
  • Listener:监听器。它可以监听Application、Session、Request对象,当这些对象发生变化的时候就会调用对应的监听方法。

Web容器

Web容器就是管理 Servlet、Filter、Listener的容器,这三个组件都在Web容器的管控范围之内,当然Servlet’容器是属于Web容器的一部分。但是不在Spring和SpringMVC的管理范围之内,所以我们不能使用Spring的注解来标注这些类。

Spring容器和SpringMVC容器

**Spring容器是用来管理 service 和 dao 的,SpringMVC容器是管理 controller 的,**有一点很重要,Spring容器和SpringMVC容器是父子容器,父容器是Spring,子容器是SpringMVC,就跟子类继承父类一样,子类可以使用父类中的属性和方法,但是父类不能使用子类的属性和方法,也就是说,controller可以使用service对象和dao对象,但是service和dao不能使用controller对象。

最后,总结一下各个容器的创建过程

  1. 首先Tomcat服务器启动
  2. Servlet容器启动
  3. 创建Spring IoC容器的实例
  4. 创建SpringMVC容器实例