Servlet生命周期详解
Servlet生命周期
- 一、Servlet 是什么及作用?
- 1、Servlet 是什么?
- 2、Servlet 的作用
- 二、Servlet 的生命周期
- 三、生命周期方法详解
- 1. init() 方法
- 2. service() 方法
- 3. doGet() 方法
- 4. doPost() 方法
- 5、destroy() 方法
- 四、生命周期图解
一、Servlet 是什么及作用?
1、Servlet 是什么?
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性, 是运行在 Web 服务器或应用服务器上的程序。
2、Servlet 的作用
它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。主要功能在于收集来自网页表单的用户输入,交互式地浏览和生成数据,还可以生成动态Web内容。
二、Servlet 的生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。
三个步骤即:初始化------>处理请求------>销毁
创建Servlet对象后---------->初始化(调用 init () 方法)--------->处理/响应客户端的请求(调用 service() 方法)--------->销毁(调用 destroy() 方法,最后由 JVM 的垃圾回收器进行垃圾回收)
三、生命周期方法详解
创建Servlet对象,通过服务器反射机制创建Servlet对象,第一次请求时才会创建。(默认)
1. init() 方法
调用Servlet对象的init()方法,初始化Servlet的信息,init()方法只会在创建后被调用一次(初始化阶段)
(1)init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化,创建于用户第一次调用该 Servlet 的 URL 时,也可以指定 Servlet 在服务器第一次启动时被加载。
(2)当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。
(3)init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。
init 方法的定义如下:
public void init() throws ServletException {// 初始化代码...
}
2. service() 方法
响应请求,调用service()或者是doGet(),doPost()方法来处理请求,这些方法是运行的在多线程状态下的。(响应客户请求阶段)
(1)service() 方法是执行实际任务的主要方法,处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
(2)每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。
(3)Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。由于在Servlet接口和GenericServlet中是没doGet,doPost等等这些方法的,HttpServlet中定义了这些方法,所以,我们每次定义一个Servlet的时候,都必须实现doGet或 doPost等这些方法。
(4)service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法进行处理。
service方法的定义如下:
public void service(ServletRequest request,ServletResponse response) throws ServletException, IOException{}
由于service() 方法由容器调用,service 方法在适当的时候会调用 doGet、doPost、doPut、doDelete 等方法。所以,我们不用对 service() 方法做任何处理,只需要根据客户端的请求类型来重写 doGet() 或 doPost() 即可。
3. doGet() 方法
用于处理请求,方法是运行的在多线程状态下的。(响应客户请求阶段)
doGet() 是服务请求中最常用的方法,用于处理请求,当URL的请求类型为GET请求 ,或者是一个未指定请求类型HTML表单,那么该请求将由 doGet() 方法处理。
doGet方法的定义如下:
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {// Servlet 代码
}
4. doPost() 方法
用于处理请求,方法是运行的在多线程状态下的。(响应客户请求阶段)
doPost() 是服务请求中最常用的方法,用于处理请求,当请求来自一个特别指定了 请求类型为POST的 HTML 表单,那么该请求将由doPost() 方法处理。
doPost方法的定义如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// Servlet 代码
}
5、destroy() 方法
在长时间没有被调用或者是服务器关闭时,会调用destroy()方法来销毁Servlet对象。(终止阶段)
(1)destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。
(2)destroy() 方法可以让Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
(3)在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。
destroy 方法定义如下:
public void destroy() {// 终止化代码...}
四、生命周期图解
理解了上面的内容再看周期图就会容易很多。图片来源于网络
Servlet生命周期详解相关推荐
- java servlet 周期_java servlet生命周期详解,一个servlet生命周期包括哪些?
小伙伴们知道servlet吗?这次我们要说的是java中的servlet,小伙伴们知道servlet的声明周期都包括哪些吗?下面就听小编介绍介绍吧. Servlet生命周期包含哪些? 我们要了解,一个 ...
- Fragment生命周期详解
关于Fragment的生命周期,博主写过Activity与Fragment生命周期详解,基本上把Fragment的生命周期详细介绍过,但是那仅仅是创建一个Fragmnet时的生命周期,而事实上Frag ...
- Android面试之Activity生命周期详解
Activity生命周期详解 一 Activity的四种状态: Activity的生命周期中存在四种基本的状态:活动状态(Active/Runing),暂停状态(Paused),停止状态(Stoppe ...
- Fragment的懒加载与生命周期详解
提示:本文仅为笔者学习记录 Fragment的懒加载与生命周期详解 什么是懒加载 了解Fragment的生命周期 onAttach onCreate onCreateView onActivityCr ...
- vue 声明周期函数_Vue 生命周期详解
Vue 生命周期详解 Vue 生命周期流程 最开始,用户使用 new Vue() 创建根 Vue 实例,或者 Vue 实例化子组件都会调用_init方法(我们将这两种实例都称为vm): functio ...
- 01.软件项目管理与敏捷方法——敏捷项目生命周期详解笔记
01.软件项目管理与敏捷方法--敏捷项目生命周期详解笔记 00.与其说是船还不如说是熟练的航行技术保证了成功的航行.--George William Curtis 01.敏捷项目是一个按照敏捷宣言宗旨 ...
- taro生命周期详解
taro生命周期详解 taro介绍 生命周期 react的钩子函数 为兼容小程序的钩子函数 个别生命周期详解以及注意 1.render()函数 2.constructor()构造函数 3.在各个生命周 ...
- Eclipse中Maven常用命令以及Maven生命周期详解
Eclipse中maven常用的命令 在某一个maven项目右键快捷方式,然后点击Run As就可以发现几个Maven的命令: Maven Build: 这个命令用于编译Maven工程,执行命令后会在 ...
- Spring 生命周期详解
Spring 生命周期详解 一.传统JAVA bean的生命周期 使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了. 一旦bean不再被使用,则由Java自动进行垃圾回 ...
- flutter 生命周期详解
flutter 生命周期详解 简介 一.widget 生命周期 二.APP 生命周期 总结 简介 众所周知,程序是有生命周期的,那么flutter 的生命周期是什么呢? flutter 的生命周期大体 ...
最新文章
- 序列多重比对工具:MUSCLE
- 并查集-----好忧伤的并查集
- find到带空格文件名用xargs处理的技巧
- BugKuCTF WEB 本地包含
- ecshop 快速添加会员
- Go连接及操作MySQL
- 只读副本和Spring Data第1部分:配置数据库
- linux系统下ntp网络时钟服务器(NTP服务器)的搭建和使用
- 不实用额外变量 交换_变量交换:巧用异或运算
- linux page buffer cache深入理解
- Asp.Net学习-Cache高速缓存
- 【初识SciPy库】
- 微软在线笔试题2015
- 【MATLAB】三维绘图 三维数据插值
- 高数——微分中值定理之拉格朗日与柯西
- 那些便宜的vps,你敢用吗?企业该如何选择云服务器?
- php 图片效果代码,php实用图片水印效果代码
- 帧同步游戏开发基础指南
- Facebook一季报解读:未来十年要打造一个怎样的世界?
- 数据库常考选择题合集