JAVAEE_Servlet_03_Servlet对象生命周期
Servlet的对象声明周期
* 什么是对象生命周期?
- 生命周期表示一个JAVA对象从创建到销毁的过程是一个生命周期
* Servlet对象生命周期
1. Servlet对象创建 无参构造
2. Servlet对象初始化 init()
3. Servlet对象服务的执行 service()
4. Servlet对象被销毁 destroy()
* Servlet对象的生命周期可以干涉吗?
> 程序员无法干涉Servlet的生命周期,甚至Servlet对象相关方法的调用程序员也是无权干涉的
> Servlet对象从创建--->方法的调用---->最后销毁,整个过程都是由web容器来管理的(服务器)
> WebContainer 来管理Servlet的生命周期
* 描述Servlet的生命周期?
> 1.首先用户在浏览器的地址栏中输入URL,发出请求。
> 2.服务器截取请求路径
> 3.服务器在请求上下文中找到该请求路径对应的Servlet对象
> 4.若没有找到对应的Servlet对象。
- 会通过Web.xml中的相关配置信息,得到该请求路径的Servlet完整类名。
- 然后通过反射机制,调用该Servlet类的无参数构造方法,完成Servlet对象的实例化,
- 然后服务器调用Servlet对象的init方法进行初始化。
- 然后服务器调用Servlet对象的Service方法提供服务
> 5.若找到了对应的Servlet对象
- 服务器直接调用Servlet对象的Service方法提供服务
> 6.Web容器在关闭的时候/Webapp重新部署的时候/该Servlet对象长时间没有用户再次访问的时候,Web容器会将该Servlet对象销毁,在销毁该对象之前,Web容器会调用该对象的destory方法,完成销毁前的准备
* Servlet对象总结:
> Servlet类的构造方法只执行一次
> Servlet对象的init方法只执行一次
> Servlet对象的Service方法只要用户请求一次,就会执行一次
> Servlet对象的destory方法只执行一次。
* Servlet注意
> init方法执行的时候,Servlet对象已经被创建好
> destory方法执行的时候,Servlet对象还没有被销毁,即将被销毁。
> Servlet对象是单例,但不符合单例模式,只能称为伪单例,真单例的构造方法是私有化的,所以Servlet对象是在单例多线程的环境下运行的。
> 因为Servlet对象是单例多线程的,所以在Servlet对象中若有实例变量,并且实例变量涉及到修改操作,那么这个Servlet对象一定存在线程安全问题,不建议在Servlet对象中使用实例变量,尽量使用局部变量。
* Servlet对象实例化之后放在哪里?
> 大多数的Web容器都是将Servlet对象以及对应的url-pattern存储到了Map集合中。
> 在Web容器中存在这样一个Map集合
Map<String, Servlet>
Key Value
---------------------------------
/login loginServlet对象引用
/delete deleteServlet对象引用
/Save saveServlet对象的引用
* 在JavaWeb网站中的所有Servlet接口实现类的实例对象,只能由服务器负责创建,开发人员不能手动创建Servlet接口实现类的实例对象。
* 在默认情况下,服务器接收到浏览器对于当前Servlet接口实现类的第一次请求时,服务器会自动创建这个Servlet接口的实例对象。如果浏览器没有请求这个Servlet实例对象,那么服务器也就不会创建这个实例对象。
* 在手动配置情况下,是可以要求服务器启动的时候就自动创建该Servlet接口的实例对象,无论浏览器有没有请求该对象。
- 配置方法: 在web.xml中进行手动配置
<servlet>
<servlet-name><servlet-name>
<servlet-class></servlet-class>
<load-no-startup>1</load-on-startup><!-- 在该标签中填写一个整数,就代表告诉服务器,在启动时就自动创建该Servlet实例对象,数字越小优先级越高,越先创建,0的优先级最高-->
</servlet>
* 在服务器运行期间,一个Servlet接口实现类,只能创建一个实例对象(一个进程(Servlet接口实现类的实例对象) 对应 多个线程(用户请求),无论有多少个用户请求来访问该Servlet实例对象,都只是访问的同一个Servlet实例对象)
* 在服务器关闭的时候,会将所有创建的Servlet实现类的实例对象销毁。
* 在Servlet接口实现类中的构造方法必须使用public修饰,要不然就会报错: HTTP状态 500 实例化Servlet类[com.shige.controller.OneServlet]异常
* 在Servlet接口实现类中重写doGet()和doPost()方法,在正常实现这些方法的时候,不应该调用super.xxx()方法,而是重新去实现这些方法,要不然就会报错 HTTP状态 405 - 方法不允许 此URL不支持Http方法GET。
JAVAEE_Servlet_03_Servlet对象生命周期的更多相关文章
- Hibernate的三种状态及对象生命周期
理解Hibernate的三种状态,更利于理解Hibernate的运行机制,这些可以让你在开发中对疑点问题的定位产生关键性的帮助. 三种状态 临时状态(Transient):在通过new关键字, ...
- .Net组件程序设计之对象生命周期
.Net组件程序设计之对象生命周期 .NET 垃圾回收 IDisposable() Using语句 .NET 垃圾回收 是CLR管理着垃圾回收器,垃圾回收器监控着托管堆,而我们使用的对象以及系统启动是 ...
- Ninject之旅之三:Ninject对象生命周期
摘要 DI容器的一个责任是管理他创建的对象的生命周期.他应该决定什么时候创建一个给定类型的对象,什么时候使用已经存在的对象.他还需要在对象不需要的时候处理对象.Ninject在不同的情况下管理对象的生 ...
- iOS视图控制对象生命周期
iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 ...
- IOS 视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途
iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 ...
- 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途
原文网址:http://blog.csdn.net/weasleyqi/article/details/8090373 iOS视图控制对象生命周期-init.viewDidLoad.viewWillA ...
- _视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途
iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 ...
- ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理
在上文中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发.订阅和处理的流程.这种实现太简单了,百十行代码就展示了一个基本工作原理.然而,要将这样的解决方案运用到实际生产环境,还有很 ...
- Python学习手册之内部方法、操作符重载和对象生命周期
在上一篇文章中,我们介绍了 Python 的类和继承,现在我们介绍 Python 的内部方法.操作符重载和对象生命周期. 查看上一篇文章请点击:https://www.cnblogs.com/dust ...
随机推荐
- TERSUS无代码开发(笔记02)-简单实例加法
简单实例加法 1.用户端元件(显示元件)(40个) 图标 英文名称 元件名称 使用说明 服务器端 客户端 Pane 显示块 是一个显示块,是HTML的div标签 √ Row 行 行元件中的显示元件 ...
- Django Admin 图片路径设置显示为图片(imageField显示方法设置)
一 使用环境 开发系统: windows IDE: pycharm 数据库: msyql,navicat 编程语言: python3.7 (Windows x86-64 executable in ...
- Centos7修改Docker默认存储位置
一.前言 Centos7安装docker之后,默认的镜像及容器存储路径为/var/lib/docker,可以使用命令docker info查看. 但是该路径默认使用的是系统盘的存储,如果挂载了数据盘, ...
- 阿里云CentOS8.0服务器配置Django3.0+Python 3.7 环境
---恢复内容开始--- 1. 下载并安装python # 安装Python3.7.6 wget https://www.python.org/ftp/python/3.7.6/Python-3.7. ...
- 看完就懂--CSS选择器优先级的计算
CSS选择器优先级的计算 什么是选择器的优先级 优先级的计算与比较(一) - 优先级具有可加性 - 选择器优先级不会超过自身最大数量级 - 同等优先级情况下,后写的覆盖前写的 - 并集选择器之间的优先 ...
- jQuery实现全网热播视频
<section id="play"> <h1>全网热播视频</h1> <ul> <li><img src=&qu ...
- springmvc字符 中文乱码问题
springmvc字符 中文乱码问题 1.字符过滤器 输入中文测试,发现乱码 以前乱码问题通过过滤器解决 , 而SpringMVC给我们提供了一个过滤器 , 可以在web.xml中配置,修改了xml文 ...
- 剑指 Offer 58 - II. 左旋转字符串 + 简单题
剑指 Offer 58 - II. 左旋转字符串 Offer_58_2 题目描述 java代码 package com.walegarrett.offer; /** * @Author WaleGar ...
- 剑指 Offer 26. 树的子结构
剑指 Offer 26. 树的子结构 Offer 26 题目详情: 题解分析 解法一: 第一种比较容易想到的解法就是查看这两棵树的前序遍历和中序遍历序列是否都匹配. 因为前序遍历和中序遍历可以唯一确定 ...
- 剑指 Offer 20. 表示数值的字符串 + 有限状态自动机
剑指 Offer 20. 表示数值的字符串 Offer 20 常规解法: 题目解题思路:需要注意几种情况: 输入的字符串前后可能有任意多个空格,这是合法的. 正负号: (1)正负号只能出现一次. (2 ...