背景

目前绝大部分项目使用的业务容器都是基于Tomcat实现的,而Tomcat实现的依据就是 Servlet 规范。阅读和理解Servlet规范可以帮助我们更好的理解Tomcat,以及出现的一些问题和如何去解决问题。

文档

最为典型的规范

Servlet,Filter,Listener

他们哥三称之为WEB应用的三大基石,在SpringBoot流行的今天,基本上很少直接看到他们的运用了,但是不妨碍他们构建我们WEB应用的基石

据我所知,大部分公司使用的还是Tomcat,异步技术还是处于尝尝鲜的情况。

启动顺序

  • Listener先启动
  • Filter 其次
  • Servlet 最后启动

    额外小知识: 在传统的Tomcat应用中,Spring的DispatchServlet是可以启动失败的,即使启动失败也不会影响应用的启动,但是外部的流量请求会出现404问题

@Scope(“prototype”) 引发404
启动顺序的规范是这样的,规范的实践者Tomcat则是如下实现的,伪代码如下,真实代码可以这里找到,点我直达

  1. //启动监听器
  2. if (ok && listenerStart()){
  3. //输出错误日志 One or more listeners failed to start. Full details will be found in the appropriate container log file
  4. ok = false;
  5. }
  6. //启动过滤器
  7. if(ok && filterStart()){
  8. //输出错误日志 One or more Filters failed to start. Full details will be found in the appropriate container log file
  9. ok = false;
  10. }
  11. //初始化启动 loadOnStartup>1 的Servlet
  12. if(ok && filterStart()){
  13. //输出错误日志 One or more Servlets failed to load on startup. Full details will be found in the appropriate container log file
  14. ok = false;
  15. }
  16. //.... other

Listener介绍

Servlet 介绍

Filter 介绍

Filter和Spring Intecepter的区别

规范的实现

如何导入Tomcat源代码到IDEA