servlet容器,web容器,spring容器,springmvc容器的区别

在这里插入图片描述
一般来说,我们的项目都需要部署在web容器(web应用服务器,如tomcat,)中。web容器中有servlet容器,spring项目部署后,存在spring容器和springmvc容器。

其中spring控制service层和dao层的bean对象。
springmvc容器控制controller层bean对象。
servlet容器控制servlet对象。

项目启动是,首先 servlet初始化,初始化过程中通过web.xml中spring的配置加载spring配置,初始化spring容器和springmvc容器。待容器加载完成。servlet初始化完成,则完成启动。
HTTP请求到达web容器后,会到达Servlet容器,容器通过分发器分发到具体的spring的Controller层。执行业务操作后返回结果。

  1. Web容器

web容器(web服务器)主要有:Apache、IIS、Tomcat、Jetty、JBoss、webLogic等,而Tomcat、Jetty、JBoss、webLogic同时也是servlet容器,或者说他们还包含了servlet容器。没有servlet容器,你也可以用web容器直接访问静态页面,比如安装一个apache等,但是如果要显示jsp/servlet,你就要安装一个servlet容器了,但是光有servlet容器是不够的,因为它要被解析成html输出,所以你仍需要一个web容器。大多数servlet容器同时提供了web容器的功能,也就是说大多servelt容器可以独立运行你的web应用。

web容器是管理servlet(通过servlet容器),以及监听器(Listener)和过滤器(Filter)的。这些都是在web容器的掌控范围里。但他们不在spring和springmvc的掌控范围里。因此,我们无法在这些类中直接使用Spring注解的方式来注入我们需要的对象,是无效的,web容器是无法识别的。

  1. Servlet容器

Servlet容器是管理servlet对象的。

Servlet容器的作用:

负责处理客户请求,当客户请求来到时,Servlet容器获取请求,然后调用某个Servlet,并把Servlet的执行结果返回给客户。

使用Servlet容器的原因:

  1. 通信支持

利用容器提供的方法,你能轻松的让servlet与web服务器对话,而不用自己建立serversocket、监听某个端口、创建流等 等。容器知道自己与web服务器之间的协议,所以你的servlet不用担心web服务器(如Apache)和你自己的web代码之间的API,只需要考虑如何在servlet中实现业务逻辑(如处理一个订单)。

  1. 生命周期管理

servlet容器控制着servlet的生与死,它负责加载类、实例化和初始化

servlet,调用servlet方法,以及使servlet实例被垃圾回收,有了servlet容器,你不需要太多的考虑资源管理。

  1. 多线程支持:

容器会自动为它所接收的每个servlet请求创建一个新的java线程。针对用户的请求,如果servlet已经运行完相应的http服务方法,这个线程就会结束。这并不是说你不需要考虑线程安全性,其实你还会遇到同步问题,不过这样能使你少做很多工作。

  1. 声明方式实现安全:

利用servlet容器,可以使用xml部署描述文件来配置和修改安全性,而不必将其硬编码写到servlet类代码中。

  1. JSP支持:

servlet容器负责将jsp代码翻译为真正的java代码。

  1. Spring容器

Spring容器是管理service和dao的。

  1. SpringMVC容器

SpringMVC容器是管理controller对象的。

Spring容器和SpringMVC容器的关系是父子容器的关系。

Spring容器是父容器,SpringMVC容器是子容器。在子容器里可以访问父容器里的对象,但是在父容器里不可以访问子容器的对象,说的通俗点就是,在controller里可以访问service对象,但是在service里不可以访问controller对象。所以这么看的话,所有的bean,都是被Spring或者SpringMVC容器管理的,他们可以直接注入。然后SpringMVC的拦截器也是SpringMVC容器管理的,所以在SpringMVC的拦截器里,可以直接注入bean对象。

Servlet容器和ServletContext的关系:

ServletContext是servlet与servlet容器之间的直接通信的接口。Servlet容器在启动一个Web应用时,会为它创建一个servletContext对象。每个web应用有唯一的servletContext对象。同一个web应用的所有servlet对象共享一个serveltContext,servlet对象可以通过它来访问容器中的各种资源。

  1. 各个容器的创建过程:

1、TOMCAT启动,Servlet容器随即启动,然后读取server.xml配置文件,启动里面配置的web应用,为每个应用创建一个“全局上下文环境”(ServletContext);

2、创建Spring容器实例。调用web.xml中配置的ContextLoaderListener,初始化WebApplicationContext上下文环境(即IOC容器),加载context­param指定的配置文件信息到IOC容器中。WebApplicationContext在ServletContext中以键值对的形式保存。

3、创建SpringMVC容器实例。调用web.xml中配置的servlet-class,为其初始化自己的上下文信息,并加载其设置的配置信息到该上下文中。将WebApplicationContext设置为它的父容器。

4、此后的所有servlet的初始化都按照3步中方式创建,初始化自己的上下文环境,将WebApplicationContext设置为自己的父上下文环境。当Spring在执行ApplicationContext的getBean时,如果在自己context中找不到对应的bean,则会在父ApplicationContext中去找。

参考博文:

https://blog.csdn.net/cherry_vicent/article/details/102833328

https://blog.csdn.net/zhanglf02/article/details/89791797

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值