Servlet生命周期详解

news/2023/10/4 0:37:35

Servlet的生命周期是由servlet的容器来控制的。分为3个阶段:初始化阶段、运行阶段、销毁阶段。

初始化阶段:

初始化阶段步骤:

Ø  Servlet容器加载servlet类,把它的. Class文件中的数据读到内存中。

Ø  Servlet容器创建servletConfig对象。servletConfig对象包含了servlet的初始化配置信息。此外servlet容器还会使得servletConfig对象与当前的web应用的servletContext对象关联。

Ø  Servlet容器创建servlet对象。

Ø  Servlet容器调用servlet对象的init(ServletConfig   config)方法。

通过初始化步骤,创建了servlet对象和servletConfig对象,并且servlet对象与servletConfig对象关联,而servletConfig对象又与当前对象的servletContext对象关联。当servlet容器完成servlet后,servlet对象只要通过getServletContext()方法就能得到web应用的servletContext对象。

注:servlet初始化的情况:

(1)当web应用处于运行阶段时,特定的servlet被客户端首次请求访问。

(2)在web.xml文件中为servlet设置了<load-on-startup>元素

<servlet>

<servlet-name>servlet1</servlet-name>

<servlet-class>servlet.servlet1</servlet-class>

<load-on-startup>0</load-on-startup>

</servlet>

说明:

在servlet的配置当中,<load-on-startup>5</load-on-startup>的含义是:

标记容器是否在启动的时候就加载这个servlet。

当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;

当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。

正数的值越小,启动该servlet的优先级越高。

(3)  当web应用被重新启动时,web应用中的所有servlet会在特定的时间被重新初始化。

运行阶段

在这个阶段sevlet可以随时响应客户端的请求。当servlet容器接到访问特定的servlet请求时,servlet容器会创建针对与这个请求的servletRequest和servletResponse对象,然后调用service()方法,并把这两个对象当做参数传递给service()方法。Service()方法通过servletRequest对象获得请求信息,并处理该请求,再通过servletResponse对象生成响应结果。

【不管是post还是get方法提交,都会在service中处理,然后,由service来交由相应的doPost或doGet方法处理,如果你重写了service方法,就不会再处理doPost或doGet了,如果重写sevice()方法,可以自己转向doPost()或doGet()方法】

注:当servlet容器把servlet生成的响应结果发送给客户后,servlet容器会销毁servletRequest和sevletResponse对象。

销毁阶段

当Web应用被终止时,servlet容器会先调用web应用中所有的servlet对象的destroy()方法,然后在销毁servlet对象。此外容器还会销毁与servlet对象关联的servletConfig对象。

在destroy()方法的实现中,可以释放servlet所占用的资源。如关闭文件输入输出流,关闭与数据库的连接。

 

注:sevlet的生命周期中,servlet的初始化和销毁只会发生一次,因此init()和destroy()方法只能被servlet容器调用一次,儿service()方法取决与servlet被客户端访问的次数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.yaotu.net/news/605395.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

cache详解

什么是缓存&#xff1f; Web 应用程序通常都是被多个用户访问。一个Web站点可能存在一个“重量级”的加载&#xff0c;它能够使得站点在访问的时候&#xff0c;拖慢整个服务器。当站点被大量用户同时访问的时候&#xff0c;访问速度缓慢是大部分网站共同存在的问题。为了解决这…

(五)nginx如何调用php和php-fpm的作用和工作原理

nginx如何调用php 采用nginxphp作为webserver的架构模式&#xff0c;在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如同调用一个静态文件那么直接简单&#xff0c;是需要动态执行php脚本。所以涉及到了对nginx.conf文件的配置…

GC算法详解

本文主要内容&#xff1a; GC的概念GC算法引用计数法&#xff08;无法解决循环引用的问题&#xff0c;不被java采纳&#xff09; 根搜索算法 现代虚拟机中的垃圾搜集算法&#xff1a; 标记-清除 复制算法&#xff08;新生代&#xff09; 标记-压缩&#xff08;老年代&#xff…

php 读取功能分割大文件实例详解

在php中&#xff0c;对于文件的读取时&#xff0c;最快捷的方式莫过于使用一些诸如file、file_get_contents之类的函数。 但当所操作的文件是一个比较大的文件时&#xff0c;这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时&#xff0c;常用的操作方法…

Beanstalk分布式内存队列系统

Beanstalk是一个高性能、轻量级的、分布式的、内存型的消息队列系统。最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟。其实Beanstalkd是典型的类Memcached设计&#xff0c;协议和使用方式都是同样的风格。其基本设计思想很简单&#xff…

一个请求过来都经过了什么

面试的时候特别喜欢问一个问题&#xff1a;”请描述一下一个请求过来到响应完成都做了什么&#xff0c;越详细越好。” 对于一个高手来说&#xff0c;他只要回答好了这一个问题&#xff0c;技术面试就通过了。一般把这个问题的答案压缩到40分钟到1个小时。因为一般的技术面试都…

XDebug调试

本文介绍如何使用PhpStorm集成xdebug在本地开发环境进行断点调试的技巧。 我配置的环境是&#xff1a;Windows10 PhpStorm PHP5.6。 1. 下载xdebug的扩展&#xff0c;并配置到php.ini View code 第一行是加载xdebug的扩展&#xff0c;路径需根据自己的环境修改。 第二行是…

Mock方法介绍

1.现有的单元测试框架 单元测试是保证程序正确性的一种有效的测试手段&#xff0c;对于不同的开发语言&#xff0c;通常都能找到相应的单元框架。 借助于这些单测框架的帮助&#xff0c;能够使得我们编写单元测试用例的过程变得便捷而优雅。框架帮我们提供了case的管理&#xf…

sed入门详解教程

sed 是一个比较古老的&#xff0c;功能十分强大的用于文本处理的流编辑器&#xff0c;加上正则表达式的支持&#xff0c;可以进行大量的复杂的文本编辑操作。sed 本身是一个非常复杂的工具&#xff0c;有专门的书籍讲解 sed 的具体用法&#xff0c;但是个人觉得没有必要去学习它…

MySQL索引原理及慢查询优化【来源美团】

背景 MySQL凭借着出色的性能、低廉的成本、丰富的资源&#xff0c;已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色&#xff0c;但所谓“好马配好鞍”&#xff0c;如何能够更好的使用它&#xff0c;已经成为开发工程师的必修课&#xff0c;我们经常会从职位描述上…

MySQL慢查询优化、索引优化、以及表等优化总结

MySQL优化概述 MySQL数据库常见的两个瓶颈是&#xff1a;CPU和I/O的瓶颈。 CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候&#xff0c;如果应用分布在网络上&#xff0c;那么查询量相当大的时候那么平瓶颈…

转载kafka集群搭建

原文地址&#xff1a;https://www.dqzboy.com/kafka%E9%9B%86%E7%BE%A4%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2%E5%92%8C%E5%AE%9E%E8%B7%B5 一、kafka介绍 1、什么是消息队列 消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上, 队列存储消息直到…

力扣2:两数相加

题目&#xff1a; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这…

力扣5:最长回文子串

给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同样是符合题意的答案。 1.中心扩散法 //中心扩散法 func longestPalindrome(s stri…

etcd常见错误及解决

1."etcdserver: mvcc: database space exceeded"错误 只要你使用过 etcd 或者 Kubernetes&#xff0c;大概率见过这个错误。它是指当前 etcd db 文件大小超过了配额&#xff0c;当出现此错误后&#xff0c;你的整个集群将不可写入&#xff0c;只读&#xff0c;对业务…

golang windows64位操作系统上编译32位应用

golang windows64位操作系统上编译32位应用 将GOARCHamd64改为386 改后程序中调用sqlite会报错 Binary was compiled with CGO_ENABLED0, go-sqlite3 requires cgo to work. This is a stub 所以还需要将CGO_ENABLED设置为1

linux系统很卡的基本排查方法

1. 查看内存使用情况 free -g 当观察到free栏已为0的时候&#xff0c;表示内存基本被吃完了&#xff0c;那就释放内存吧&#xff08;释放内存参考上篇文章&#xff09; 2. 查看磁盘使用情况 df -h 当发现磁盘使用率很高时&#xff0c;那就要释放磁盘空间了&#xff0c;删除一些…

监控报警产品对比

Prometheus架构图&#xff1a;

JVM理解小结

提起jvm,多多少少会有些迷茫,确实,深入了解jvm在我们实际开发中看似帮助不大,但是,随着随着理解深入,总会拓宽我们的思路,记一次jvm理解. 我是通过下面这几个方面去理解 1.jvm的垃圾回收机制 说到垃圾回收,我们首先要了解谁要被回收? 什么时候回收 ? 如何回收? java虚拟机…
最新文章