【Servlet】生命周期

文章目录

  • 一、生命周期
  • 二、错误实例
  • 三、修改Servlet的初始化时机

一、生命周期

生命周期:实例化、初始化、服务、销毁

从出生到死亡的过程。对应Servlet中的三个方法:init(),service(),destroy()

  1. 被创建:执行init方法,只执行一次

    默认情况下,第一次接收请求时,这个Servlet会进行实例化(在底层使用反射,调用构造方法)、初始化(init()方法)、然后服务(service)

  2. 提供服务:执行service方法,执行多次

    从第二次请求开始,每一次都是服务

  3. 被销毁:执行destroy方法,只执行一次

    随着tomcat容器的销毁,其中的所有servlet实例会被销毁,并调用销毁方法

    image-20240304193452506

结论:Servlet实例tomcat只会创建一个,所有的请求都是这个实例去响应。


二、错误实例

Demo02Servlet.java

// 注意这里改成了private
private Demo02Servlet () {
    System.out.println("正在实例化...");
}

image-20240304195703468

默认情况下,第一次请求时,tomcat才会去实例化,初始化,然后再服务。这样的好处是提高系统的启动速度。缺点是:第一次请求时,耗时较长。

结论:如果需要提高系统的启动速度,当前默认情况就是这样。如果需要提高响应速度,我们应该设置Servlet的初始化时机。


三、修改Servlet的初始化时机

默认是第一次请求时实例化,初始化。我们可以通过(startup:启动,load:加载)

可以配置指定Servlet启动的先后顺序,在标签下配置

的值为0或正整数(一般是0-10之间,最小值是0),数字越小,启动的时间越靠前

<servlet>
    <servlet-name>Demo02Servlet</servlet-name>
    <servlet-class>com.atguigu.servlets.Demo02Servlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

Servlet在容器中是单例(Demo02Servlet在tomcat容器里只会创建一个实例,即所有的请求都是同一个实例去响应)的、线程不安全的(一个线程需要根据这个实例中的某个成员变量值去做逻辑判断,但是在中间某个时机,从而导致第一个线程的执行路径发生了变化)。

线程1在读取num=1的时候,进入了service,刚刚准备执行if这个判断,但这个瞬间,线程2执行不同路径的代码,将num的值修改为了5,这个if就不成立了,就把线程1执行的路径修改掉了。

因为Servlet是单例的,所以所有的线程都是单例的,就会出现线程不安全。

image-20240304202032387

我们已经知道了servlet是线程不安全的,给我们的启发是:尽量的不要在servlet中定义成员变量。如果不得不定义成员变量,那么:

①不要去修改成员变量的值

②不要根据成员变量的值做一些逻辑判断。

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

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

相关文章

磁性脂质体MLs纳米药物载体

磁性脂质体&#xff08;magnetoliposomes, MLs&#xff09;是一种结合了脂质体和磁性纳米颗粒&#xff08;MNPs&#xff09;的复合纳米结构&#xff0c;这种结构兼具了脂质体的生物相容性和磁性纳米颗粒的磁响应性&#xff0c;使其成为生物医学领域尤其是在药物递送系统中非常有…

算法学习——LeetCode力扣动态规划篇3(494. 目标和、474. 一和零、518. 零钱兑换 II)

算法学习——LeetCode力扣动态规划篇3 494. 目标和 494. 目标和 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 …

sk-learn 特征数据预处理方式汇总

数据集及基本操作 1&#xff09;数据集的组成 数据集由特征(feature)与标签(label)构成。 特征是输入数据。 什么是特征&#xff08;Features&#xff09;: 机器学习中输入数据&#xff0c;被称为特征。通常特征不止1个&#xff0c;可以用 n 维向量表示n个特征。 Features 数…

智能仪器替代技术工程师重复工作 专注生产方案优化!

关键词&#xff1a;智能仪器,测径仪,测宽仪,测厚仪,直线度测量仪 在当今竞争激烈的市场环境下&#xff0c;企业需要不断提高生产效率和质量&#xff0c;以满足客户的需求。而技术工程师在生产过程中扮演着至关重要的角色&#xff0c;但他们的时间和精力往往被重复的工作所占据&…

【爬虫框架Scrapy】02 Scrapy入门案例

接下来介绍一个简单的项目&#xff0c;完成一遍 Scrapy 抓取流程。通过这个过程&#xff0c;我们可以对 Scrapy 的基本用法和原理有大体了解。 1. 本节目标 本节要完成的任务如下。 创建一个 Scrapy 项目。 创建一个 Spider 来抓取站点和处理数据。 通过命令行将抓取的内容…

Stable Diffusion WebUI 附加功能/图片放大(Extras):单张图片/批量处理/从目录进行批量处理

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 大家好&#xff0c;我是水滴~~ 篇文章主要讲解 Stable Diffusion WebUI 的附加功能/图片放大&#xff08;Extras&#xff09;的使用&#xff0c;主要…

IP归属地在互联网行业中的应用

摘要&#xff1a;IP&#xff08;Internet Protocol&#xff09;地址归属地是指互联网上某个IP地址所对应的地理位置信息。在互联网行业中&#xff0c;IP归属地具有重要的应用价值&#xff0c;包括网络安全、广告定向、用户定位等方面。IP数据云将探讨IP归属地在互联网行业中的应…

RUST使用crates.io上的依赖完整教程

1.打开crates.io 2.搜索要使用的依赖,如rand 点击包名,进入包详情页面: 添加依赖方法有两种 1.使用cargo命令 2.直接修改Cargo.toml 使用cargo命令操作如下: 在工程目录执行如下命令: cargo add rand 执行完成后如自动向Cargo.toml中添加依赖如下: 手动修改Cargo.toml是…

社交媒体:12种打造吸引力社交媒体内容的方法

社交媒体在当代社会中扮演着重要的角色&#xff0c;越来越多的人利用社交媒体与朋友、家人和同事保持联系。为了在这个竞争激烈的环境中脱颖而出&#xff0c;我们需要学会如何创建吸引人的内容。本文将介绍12种方法&#xff0c;帮助您在社交媒体上打造引人注目的内容。 1. 挑选…

2024资源环境、材料科学与可持续发展国际会议(RESMSSD2024)

2024资源环境、材料科学与可持续发展国际会议(RESMSSD2024) 会议简介 随着人类对地球资源的不断开发和环境问题的日益严重&#xff0c;资源环境、材料科学与可持续发展成为了全球关注的焦点。为了进一步推动相关领域的发展和创新&#xff0c;2024资源环境、材料科学与可持续发…

Electron的学习

目录 项目初始化可以看官网非常详细根路径创建.vscode文件夹主进程和渲染进程之前的通信ipcRenderer.send和ipcMain.on的使用ipcRenderer.invoke和ipcMain.handle的使用 切换主题模式文件拖放保存消息通知进度展示图标闪烁自定义菜单自定义右键菜单 项目初始化可以看官网非常详…

简单的登录页面

简单的登录页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>* {margin: 0;padding: 0;}html {height: 100%;}body {height: 100%;}.container {height: 100%;ba…

jspm智能仓储系统

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;智能仓储系统当然也不能排除在外。智能仓储系统是以实际运用为开发背景&#xff0c;运用软件工程开发方法&#xff0c;采…

jenkins进行自动化部署

jenkins自动化部署 hello&#xff0c;大家好&#xff0c;前文我们已经下载好我们的jenkins了&#xff0c;下面我们用jenkins来实现自动化部署啦&#xff01; 一、下载插件 我们选择插件管理 一个是Maven Integration plugin&#xff0c;一个是 Publish Over SSH 这里因为作…

让工作自动化起来!无所不能的Python

让工作自动化起来&#xff01;无所不能的Python 一、Python是办公自动化的重要工具二、Python是提升职场竞争力的利器三、Python是企业数字化的重要平台四、Python是AI发展的重要通道之一内容简介作者简介前言读者对象如何阅读本书购买链接参与方式 随着我国企业数字化和信息化…

DC-9靶场

一.环境搭建 1.下载地址 靶机下载地址&#xff1a;https://download.vulnhub.com/dc/DC-9.zip 2.虚拟机配置 设置虚拟机为nat&#xff0c;遇到错误点重试和是 开启虚拟机如下图所示 二.开始渗透 1. 信息收集 查找靶机的ip地址 arp-scan -l 发现靶机的ip地址为192.168.11…

● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

● 435. 无重叠区间 class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:if len(intervals)1:return 0intervalssorted(intervals,keylambda x:(x[0],x[1]))res0for i in range(1,len(intervals)):if intervals[i][0]<intervals[i-1][…

KUKA机器人更改时间和HMI最小化设置

在使用 KUKA 机器人时&#xff0c;示教器上左边有个“表”的图标&#xff0c;点一下就会显示时间。但一般不准&#xff0c;想要更改时间可以通过HMI最小化后进行更改设置。更改时间需要将示教器界面最小化&#xff0c;也就是进入Windows 界面。通过以下步骤可以进行设置&#x…

自定义口令加入群聊怎么弄?用词令关键词直达口令加入微信群延长群二维码7天有效方法

微信口令加入群聊有二种方式 一、微信面对面建群 微信面对面建群的方式适合现实中的朋友之间相互认识且想要建立群聊的场景。微信面对面建群口令加入群聊的有效距离是在几十米范围内&#xff0c;因此只能是附近几十米范围内的人&#xff0c;正确输入微信面对面建群口令后才可…

Linux---多线程(下)

前情提要&#xff1a;Linux---多线程(上) 七、互斥 临界资源&#xff1a;多线程执行流共享的资源就叫做临界资源临界区&#xff1a;每个线程内部&#xff0c;访问临界资源的代码&#xff0c;就叫做临界区互斥&#xff1a;任何时刻&#xff0c;互斥保证有且只有一个执行流进入临…