学习目的
- 了解Servlet在Http服务器之中的流程职责
- 掌握Servlet的生命周期(重点)
- 掌握Http服务器请求对象和响应对象的生命周期
一、Servlet对象生命周期
Servlet对象创建
在一个网站中,所有Servlet接口实现类的实例对象,只能由Http服务器负责额创建,开发人员不能手动创建Servlet接口实现类的实例对象。(开发人员只负责Servlet接口的实现与方法重写)Servlet对象创建时机
在默认的情况下,Http服务器接收到 对于当前Servlet接口实现类 的第一次请求时,就自动创建这个Servlet接口实现类的实例对象。(只创建一次?还是每次访问该Servlet对象都创建?无论浏览器有多少个用户或者提交多少次请求,对于同一个动态资源文件,只创建一个Servlet对象。)手动建议Http服务器创建Servlet实例对象
默认情况下,浏览器向服务器发送请求后,Http服务器会自动创建Servlet对象。但也可以通过手动配置,要求Http服务器在启动时自动创建某个Servlet接口实现类的实例对象。(可通过以下代码,将项目发布到服务器进行测试,在控制台查看Servlet的输出信息)
<servlet>
<servlet-name>GG</servlet-name>
<servlet-class>com.yry.controller.GGServlet</servlet-class>
<!-- 以上GGServlet对象不会在Http服务器启动时"自动"创建,而是用户访问时才创建-->
<!-- 以下mmServlet对象会在Http服务器启动时"立即"创建-->
<servlet-name>mm</servlet-name>
<servlet-class>com.yry.controller.mmServlet</servlet-class>
<!--任意大于0的整数即可,表示Http服务器启动 就立即创建Servlet对象-->
<load-on-startup> 30 </load-on-startup>
</servlet>
Servlet创建次数
在Http服务器运行期间,一个Servlet接口实现类只能被创建出一个实例对象(不重复创建);在Http服务器关闭时刻,自动将网站中所有的Servlet对象进行销毁。Servlet对象销毁
无论浏览器提交多少次请求,Http服务器创建了多少个Servlet对象,在Http服务器关闭时,所有的Servlet对象都将会销毁。Servlet生命流程
浏览器输入URL中Servlet简名 --> Http服务器接收请求 --> Http服务器创建Servlet实例对象 --> 调用Servlet父类HttpServlet的Service()方法 --> 执行Servlet的doGet()或doPost()方法 --> Http服务器关闭 --> Servlet实例对象销毁。
1.1 IDEA快速创建Servlet
描述
在IDEA开发工具中,提供了快速创建Sevrlet的快捷键。-
IDEA创建Servlet步骤
在已创建的web项目下 --> 在src目录中右键 --> new --> 最下方选择Sevlet(或creat Servlet) --> 输入Servlet名称 --> 填写Servlet存放的包名和路径 --> 取消左下角的勾选 --> 完成Servlet创建
-
管理Servlet对象
在IDEA中快速创建Servlet对象后,IDEA会自动生成一个Servlet接口实现类,并且会自动弹出web.xml文件,用于及时编写Servlet信息交给服务器进行管理
二、Http协议包对象
- 分类
- Http请求协议包对象
- Http响应协议包对象
- 特点
- 请求对象 和 响应对象的生命周期贯穿于一次服务器对浏览器请求的处理过程中,从服务器接收到请求开始,到服务器将响应包返回时结束;
- 请求对象 和 响应对象相当于用户在服务端的代言人。
2.1 请求对象生命周期
请求对象创建
在Http服务器接收到浏览器发送的Http请求协议包之后,Http服务器自动为当前的Http请求协议包生成 一个请求对象 和 一个响应对象。请求对象的作用
在Http服务器调用 Servlet实现类重写的doGet() 或 doPost()方法时,负责将 请求对象 和 响应对象作为实参传递到doGet() 或 doPost()方法中,确保doGet() 或 doPost()的正确执行。请求对象销毁
在Http服务器准备推送Http响应协议包之前(将doGet() / doPost()的执行结果返回),Http服务器会负责将本次浏览器请求关联的 请求对象 和 响应对象销毁。
2.2 响应对象生命周期
响应对象创建
在Http服务器接收到浏览器发送的Http请求协议包之后,Http服务器自动为当前的Http请求协议包生成 一个请求对象 和 一个响应对象。响应对象的作用
在Http服务器调用 Servlet实现类重写的doGet() 或 doPost()方法时,负责将 请求对象 和 响应对象作为实参传递到doGet() 或 doPost()方法中,确保doGet() 或 doPost()的正确执行。响应对象销毁
在Http服务器准备推送Http响应协议包之前(将doGet() / doPost()的执行结果返回),Http服务器会负责将本次浏览器请求关联的 响应对象销毁。