本文参照:极客时间-《深入拆解 Tomcat & Jetty》-03_你应该知道的Servlet规范和Servlet容器 & 04_打造和运行一个Servlet

Servlet规范

Servlet容器用来加载和管理业务类。HTTP服务器不直接跟业务类打交道,而是把请求交给Servlet容器去处理,Servlet容器会将请求转发到具体的Servlet,如果这个Servlet还没创建,就加载并实例化这个Servlet,然后调用这个Servlet的接口方法。因此Servlet接口其实是Servlet容器跟具体业务类之间的接口。


图的左边表示HTTP服务器直接调用具体业务类,它们是紧耦合的。再看图的右边,HTTP服务器不直接调用业务类,而是把请求交给容器来处理,容器通过Servlet接口调用业务类。因此Servlet接口和Servlet容器的出现,达到了HTTP服务器与业务类解耦的目的。

Servlet接口和Servlet容器这一整套规范叫作Servlet规范。Tomcat和Jetty都按照Servlet规范的要求实现了Servlet容器,同时它们也具有HTTP服务器的功能。

Servlet容器

Spring、SpringMVC和Servlet

Tomcat&Jetty在启动时给每个Web应用创建一个全局的上下文环境,这个上下文就是ServletContext,其为后面的Spring容器提供宿主环境。

Tomcat&Jetty在启动过程中触发容器初始化事件,Spring的ContextLoaderListener会监听到这个事件,它的contextInitialized方法会被调用,在这个方法中,Spring会初始化全局的Spring根容器,这个就是Spring的IoC容器,IoC容器初始化完毕后,Spring将其存储到ServletContext中,便于以后来获取。

Tomcat&Jetty在启动过程中还会扫描Servlet,一个Web应用中的Servlet可以有多个,以SpringMVC中的DispatcherServlet为例,这个Servlet实际上是一个标准的前端控制器,用以转发、匹配、处理每个Servlet请求。

Servlet一般会延迟加载,当第一个请求达到时,Tomcat&Jetty发现DispatcherServlet还没有被实例化,就调用DispatcherServlet的init方法,DispatcherServlet在初始化的时候会建立自己的容器,叫做SpringMVC 容器,用来持有Spring MVC相关的Bean。同时,Spring MVC还会通过ServletContext拿到Spring根容器,并将Spring根容器设为SpringMVC容器的父容器,请注意,Spring MVC容器可以访问父容器中的Bean,但是父容器不能访问子容器的Bean, 也就是说Spring根容器不能访问SpringMVC容器里的Bean。说的通俗点就是,在Controller里可以访问Service对象,但是在Service里不可以访问Controller对象。

总结

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接口,前者是基于过程的,后者是基于状态的

Web容器(三):Servlet规范和Servlet容器相关推荐

  1. 深入理解Tomcat和Jetty源码之第二篇servlet规范和servlet容器

    深入理解Tomcat和Jetty源码之第二篇servlet规范和servlet容器 思维导图总览 这篇推送主要讲servlet的规范和什么是servlet容器? 1.先来讲讲servlet规范: 2. ...

  2. java web第三章 Day3 2020080605018

    目录: 1.Tomcat安装启动以及诊断 2.Serlevt基础概述以及开发入门 3.建webo项目 学习目标 学会配置tomcat,及清楚其作用. 一.Toncat是干什么的: Toncat是Apa ...

  3. idea servlet自动配置web.xml_Spring Boot学习04_嵌入式Servlet容器自动配置原理

    在Spring Boot的自动配置包下,找到web模块中的servlet文件夹下的ServletWebServerFactoryConfiguration类 一.嵌入式Servlet容器默认的配置原理 ...

  4. Web 容器、HTTP 服务器 、Servlet 容器区别与联系

      首先浏览器发起 HTTP 请求,像早期的时候只会请求一些静态资源,这时候需要一个服务器来处理 HTTP 请求,并且将相应的静态资源返回.   这个服务器叫 HTTP 服务器.   简单点说就是解析 ...

  5. Servlet自动注入Spring容器中的Bean解决方法

    Servlet自动注入Spring容器中的Bean解决方法 参考文章: (1)Servlet自动注入Spring容器中的Bean解决方法 (2)https://www.cnblogs.com/jank ...

  6. java web netty_基于Netty的非Servlet规范 JavaWeb框架及高性能 Java服务器

    Bay 一个非Servlet规范的JavaWeb框架,包括一个基于Netty的高性能服务器. ##介绍 这是一个基于Netty实现的非Servlet规范的Web服务器,由于底层设计经验不足,所以实际上 ...

  7. Servlet规范之Listener工作原理

    监听器原理: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. 简单的说,被监听对象A中 ...

  8. Servlet规范之Filter工作原理

    概述 Filter是Servlet规范中的过滤器,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求数据进行检查或改动,并依次通 ...

  9. Servlet规范总结

    Servlet接口 Servlet规范的核心接口即是Servlet接口,它是所有Servlet类必须实现的接口,在Java Servelt API中已经提供了两个抽象类方便开发者实现Servlet类, ...

最新文章

  1. sqlserver 查找某个字段在哪张表里
  2. linux 压缩和解压缩(zip/unzip)
  3. 一套代码同时支持.NET Framework和.NET Core
  4. LeetCode Min Stack 最小值栈
  5. java里有没有 0的使用_请问有没有人有零基础Java基础习题?
  6. 支持 RISC-V 芯片的 Android 系统来了!
  7. java实验三多态性_Java实验3 类的多态性和接口
  8. 【UOJ#310】【UNR#2】黎明前的巧克力(FWT)
  9. 台达a2_台达伺服ASDA-A2系列解决五轴CNC方案助力雕刻机行业换代升级
  10. RecyclerView子View不刷新(RequestLayout无效),RecyclerView.mEatRequestLayout
  11. R语言数据可视化之美:专业图表绘制指南
  12. 漏洞复现之CVE-2018-1273 Spring Data Commons 远程命令执行
  13. 使用c语言函数使二数相减,什么是c语言
  14. 《失控》之五--共同进化
  15. windows10怎么用cmd编译C语言,win10怎么样使用cmd来运行程序
  16. Head First Java资源
  17. spring mysql_eclipse中spring访问mysql的简易实现-阿里云开发者社区
  18. 【校招VIP】前端校招考点之页面转换算法
  19. c#窗体编辑个人简历_编辑个人简历求职简历
  20. 关于maven更新超时问题显示报错

热门文章

  1. 阻止计算机系统自动更新,如何防止电脑自动更新系统
  2. OpenCV安装成功,但是无法导入 cv2 的指定模块 -- Ubuntu Anaconda 环境一键安装 opencv
  3. 全国高铁线路及站点shp数据(2020年)
  4. JavaBean 和 pojo类区别
  5. 图像算法工程师常考的面试问题附回答
  6. Web服务器搭建(一)
  7. GoAhead2.5源代码分析之7-form请求处理(form.c)
  8. PMP、IPMP、ITPMP、CPMP详解(项目管理认证详解)
  9. 安利一个适合调试rt thread的串口助手软件
  10. UDK Stat命令