一、前言
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。