一、前言
Servlet(Server Applet),全称Java Servlet。是用 Java 编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。狭义的 Servle t是指 Java 语言实现的一个接口,广义的 Servlet 是指任何实现了这个 Servlet 接口的类,一般情况下,人们将 Servlet 理解为后者。
Servlet 运行于支持 Java 的应用服务器中。从实现上讲,Servlet 可以响应任何类型的请求,但绝大多数情况下Servlet 只用来扩展基于 HTTP 协议的 Web 服务器。
Servlet 版本发布
| Servlet API 版本 | 发布日期 | 平台 | 重要变化 |
|---|---|---|---|
| Servlet 4.0 | 2017年9月 | Java EE 8 | HTTP/2 |
| Servlet 3.1 | 2013年5月 | Java EE 7 | Non-blocking I/O, HTTP protocol upgrade mechanism (WebSocket)[1] |
| Servlet 3.0 | 2009年12月 | Java EE 6, Java SE 6 | Pluggability, Ease of development, Async Servlet, Security, File Uploading |
| Servlet 2.5 | 2005年9月 | Java EE 5, Java SE 5 | Requires Java SE 5, supports annotation |
| Servlet 2.4 | 2003年11月 | J2EE 1.4, J2SE 1.3 | web.xml uses XML Schema |
| Servlet 2.3 | 2001年8月 | J2EE 1.3, J2SE 1.2 | Addition of Filter |
| Servlet 2.2 | 1999年8月 | J2EE 1.2, J2SE 1.2 | Becomes part of J2EE, introduced independent web applications in .war files |
| Servlet 2.1 | 1998年11月 | Unspecified | First official specification, added RequestDispatcher, ServletContext |
| Servlet 2.0 | JDK 1.1 | Part of Java Servlet Development Kit 2.0 | |
| Servlet 1.0 | 1997年6月 |
工作模式
- 客户端发送请求至服务器。
- 服务器启动并调用 Servlet,Servlet 根据客户端请求生成响应内容并将其传给服务器。
- 服务器将响应返回客户端。
通用 Servlet
一般来说,通用 Servlet 由javax.servlet.GenericServlet实现Servlet接口。程序设计人员可以通过使用或继承这个类来实现通用 Servlet 应用。HttpServlet
javax.servlet.http.HttpServlet实现了专门用于响应 HTTP 请求的 Servlet,提供了响应对应 HTTP 标准请求的doGet()、doPost()等方法。生命周期
当 servlet 被部署在应用服务器中(应用服务器中用于管理 Java 组件的部分被抽象成为容器)以后,由容器控制 servlet 的生命周期。除非特殊指定,否则在容器启动的时候,servlet 是不会被加载的,servlet 只会在第一次请求的时候被加载和实例化。servlet 一旦被加载,一般不会从容器中删除,直至应用服务器关闭或重新启动。但当容器做存储器回收动作时,servlet 有可能被删除。也正是因为这个原因,第一次访问 servlet 所用的时间要大大多于以后访问所用的时间。
servlet 在服务器的运行生命周期为,在第一次请求(或其实体被内存垃圾回收后再被访问)时被加载并执行一次初始化方法,跟着执行正式运行方法,之后会被常驻并每次被请求时直接执行正式运行方法,直到服务器关闭或被清理时执行一次销毁方法后实体销毁。Servlet 容器
Servlet 容器也叫 Servlet 引擎,是 Web 服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务。Servlet 没有 main 方法,不能独立运行,它必须被部署在 Servlet 容器中,由容器来实例化和调用 Servlet 的方法(如 doGet()、doPost()),Servlet 容器在 Servlet 的生命周期内包容和管理 Servlet 。
解码基于 MIME的请求,格式化基于MIME的响应。常用的MIME类型:text/html,application/pdf,video/quicktime,application /java,image/jpeg,application/jar,application/octet-stream,application/x- zip。Tomcat
Tomcat 是一个免费的开源的 Servlet 容器。二、Servlet 规范
三、Tomcat
2.1 Tomcat 总体架构

2.2 Tomcat 容器模型

从上图可以看出 Tomcat 的容器分为四个等级,真正管理 Servlet 的容器是 Context 容器,一个 Context 对应一个 Web 工程:
2.3 Servlet 容器启动过程
注解注入
@WebServlet、@WebListener、@WebFilter 注册对应的 Servlet、Listener、Filter。
