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生命周期详解相关推荐

  1. java servlet 周期_java servlet生命周期详解,一个servlet生命周期包括哪些?

    小伙伴们知道servlet吗?这次我们要说的是java中的servlet,小伙伴们知道servlet的声明周期都包括哪些吗?下面就听小编介绍介绍吧. Servlet生命周期包含哪些? 我们要了解,一个 ...

  2. Fragment生命周期详解

    关于Fragment的生命周期,博主写过Activity与Fragment生命周期详解,基本上把Fragment的生命周期详细介绍过,但是那仅仅是创建一个Fragmnet时的生命周期,而事实上Frag ...

  3. Android面试之Activity生命周期详解

    Activity生命周期详解 一 Activity的四种状态: Activity的生命周期中存在四种基本的状态:活动状态(Active/Runing),暂停状态(Paused),停止状态(Stoppe ...

  4. Fragment的懒加载与生命周期详解

    提示:本文仅为笔者学习记录 Fragment的懒加载与生命周期详解 什么是懒加载 了解Fragment的生命周期 onAttach onCreate onCreateView onActivityCr ...

  5. vue 声明周期函数_Vue 生命周期详解

    Vue 生命周期详解 Vue 生命周期流程 最开始,用户使用 new Vue() 创建根 Vue 实例,或者 Vue 实例化子组件都会调用_init方法(我们将这两种实例都称为vm): functio ...

  6. 01.软件项目管理与敏捷方法——敏捷项目生命周期详解笔记

    01.软件项目管理与敏捷方法--敏捷项目生命周期详解笔记 00.与其说是船还不如说是熟练的航行技术保证了成功的航行.--George William Curtis 01.敏捷项目是一个按照敏捷宣言宗旨 ...

  7. taro生命周期详解

    taro生命周期详解 taro介绍 生命周期 react的钩子函数 为兼容小程序的钩子函数 个别生命周期详解以及注意 1.render()函数 2.constructor()构造函数 3.在各个生命周 ...

  8. Eclipse中Maven常用命令以及Maven生命周期详解

    Eclipse中maven常用的命令 在某一个maven项目右键快捷方式,然后点击Run As就可以发现几个Maven的命令: Maven Build: 这个命令用于编译Maven工程,执行命令后会在 ...

  9. Spring 生命周期详解

    Spring 生命周期详解 一.传统JAVA bean的生命周期 使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了. 一旦bean不再被使用,则由Java自动进行垃圾回 ...

  10. flutter 生命周期详解

    flutter 生命周期详解 简介 一.widget 生命周期 二.APP 生命周期 总结 简介 众所周知,程序是有生命周期的,那么flutter 的生命周期是什么呢? flutter 的生命周期大体 ...

最新文章

  1. 序列多重比对工具:MUSCLE
  2. 并查集-----好忧伤的并查集
  3. find到带空格文件名用xargs处理的技巧
  4. BugKuCTF WEB 本地包含
  5. ecshop 快速添加会员
  6. Go连接及操作MySQL
  7. 只读副本和Spring Data第1部分:配置数据库
  8. linux系统下ntp网络时钟服务器(NTP服务器)的搭建和使用
  9. 不实用额外变量 交换_变量交换:巧用异或运算
  10. linux page buffer cache深入理解
  11. Asp.Net学习-Cache高速缓存
  12. 【初识SciPy库】
  13. 微软在线笔试题2015
  14. 【MATLAB】三维绘图 三维数据插值
  15. 高数——微分中值定理之拉格朗日与柯西
  16. 那些便宜的vps,你敢用吗?企业该如何选择云服务器?
  17. php 图片效果代码,php实用图片水印效果代码
  18. 帧同步游戏开发基础指南
  19. Facebook一季报解读:未来十年要打造一个怎样的世界?
  20. 数据库常考选择题合集

热门文章

  1. K.function的用法
  2. 怎么判断苹果开发者账号是否认证了
  3. 如何爬取豆瓣电影?python十分钟搞定
  4. ps图层新建 ,合并可见图层 ,盖印图层
  5. 《MLB棒球创造营》:走近棒球运动·迈阿密马林鱼队
  6. Java8 stream新定义运算
  7. data在python_Fake data的使用和产生 - Python篇
  8. 有关计算机知识竞赛的新闻稿,知识竞赛通讯稿5篇
  9. Web前端期末大作业-农产品一体化平台网页设计(HTML+CSS+JS)
  10. Redis RDB和AOF