背景
目前绝大部分项目使用的业务容器都是基于Tomcat实现的,而Tomcat实现的依据就是 Servlet
规范。阅读和理解Servlet规范可以帮助我们更好的理解Tomcat,以及出现的一些问题和如何去解决问题。
文档
- 英文文档地址[4.0版本]
- 中文文档地址[3.0版本]
- Github 4.0 翻译版本
最为典型的规范
Servlet,Filter,Listener
他们哥三称之为WEB应用的三大基石,在SpringBoot流行的今天,基本上很少直接看到他们的运用了,但是不妨碍他们构建我们WEB应用的基石
据我所知,大部分公司使用的还是Tomcat,异步技术还是处于尝尝鲜的情况。
启动顺序
- Listener先启动
- Filter 其次
- Servlet 最后启动
额外小知识: 在传统的Tomcat应用中,Spring的DispatchServlet是可以启动失败的,即使启动失败也不会影响应用的启动,但是外部的流量请求会出现404问题
@Scope(“prototype”) 引发404
启动顺序的规范是这样的,规范的实践者Tomcat则是如下实现的,伪代码如下,真实代码可以这里找到,点我直达
//启动监听器
if (ok && listenerStart()){
//输出错误日志 One or more listeners failed to start. Full details will be found in the appropriate container log file
ok = false;
}
//启动过滤器
if(ok && filterStart()){
//输出错误日志 One or more Filters failed to start. Full details will be found in the appropriate container log file
ok = false;
}
//初始化启动 loadOnStartup>1 的Servlet
if(ok && filterStart()){
//输出错误日志 One or more Servlets failed to load on startup. Full details will be found in the appropriate container log file
ok = false;
}
//.... other