在开始解释servlet是如何工作之前,让我们了解三个术语。
Web Server: 它可以处理客户端发送的请求,使用Http Response响应该请求。
Web Application(webapp): 在本质南中,我将其称之为webapp,基本上这个工程就是你的web应用,是servlet的集合。
Web Container: 也被称为Servlet容器或者Servlet引擎。它是Web Server的一部分,与servlet交互。是管理servlet生命周期的Web Server主要组剑。
你将发现此指导中的一部分早已经在servlet lift cycle 指导中了。然而,本知道聚焦于servlet应用(webapp)的工作原理而不是它的生命周期。我强烈建议你读此知道来了解servlet到底如何工作的。
Servlet如何工作的?
1) 当web服务器(例如tomcat)开启,servlet容器部署并装载所有的servlet。在这一步,Servlet容器创建ServletContent对象。ServletContext对象是一个接口,定义了很多与servlet容器交互的方法。
注意:
在每个webapp中只有一个ServletContext,它对于所有的servletl是公用的。ServletContext有几个有用的方法,例如addListener(),addFilter()等。现在我不解释这些方法,在接下来的关于ServletContext独立章节再详细阐述它们。
2) 一旦servlet被载入,servlet容器创建这些servlet类的实例。对于每个servlet,它的init()方法被调用。
3) 客户端(用户的浏览器)发送Http请求到web server通过某个端口。web server每受到一个请求,servlet容器创建HttpServletRequest 和 HttpServletResponse 对象。HttpServletREquest对象提供了对请求信息的访问,HttpServletResponse对象允许我们在将http响应发送到客户机之前对其进行格式化和更改
对于每一个客户端请求servlet容器生成一个新的线程调用service()方法。service()方法分发基于请求类性分发请求到对应的请求方法上。
例如,如果服务器接收到一个Get请求,service()通过调用doGet()方法分发该请求到doGet()方法上。Post,Head,Put等请求也是类似这样通过service()方法分发到对应的doPost(),doHead(),doPut()方法上。
[image]()
4) 当servlet容器关闭,卸载所有的servlet并调用每个被初始化的servlet的destory()方法。