servlet初始化阶段(请求Servlet时,部署Servlet的容器要执行哪些步骤)

:暂无数据 2026-08-13 10:10:01 :0

servlet初始化阶段(请求Servlet时,部署Servlet的容器要执行哪些步骤)

大家好,servlet初始化阶段相信很多的网友都不是很明白,包括请求Servlet时,部署Servlet的容器要执行哪些步骤也是一样,不过没有关系,接下来就来为大家分享关于servlet初始化阶段和请求Servlet时,部署Servlet的容器要执行哪些步骤的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

请求Servlet时,部署Servlet的容器要执行哪些步骤

Servlet的生命周期是由servlet的容器来控制的。
分为3个阶段:初始化阶段、运行阶段、销毁阶段。
一、初始化阶段:
a Servlet容器加载servlet类,把它的.Class文件中的数据读到内存中。
b Servlet容器创建servletConfig对象。servletConfig对象包含了servlet的初始化配置信息。此外 servlet容器还会使得servletConfig对象与当前的web应用的servletContext对象关联。
c Servlet容器创建servlet对象。
d Servlet容器调用servlet对象的init(ServletConfig config)方法。
(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被客户端访问的次数。

servlet 何时被实例化、何时初始化、何时被创建、何时被加载

pring三种实例化Bean的方法:


1、 构造器

《!-- 体验1 --》

《bean id="personService" class="com.persia.PersonServiceBean"》

《!-- index 代表方法的参数序号,由0开始,基本的类型Type可以不声明--》
《constructor-arg index="0" value="构造注入的name" /》
《constructor-arg index="1" type="com.persia.IDaoBean" ref="personDao"/》
《/bean》

对应类
public PersonServiceBean(String name, IDaoBean personDao) { 
this.name = name; 
this.personDao = personDao; 
}

《!-- 体现2--》

《bean id="personDao" class="cn.itcast.dao.impl.PersonDaoBean" /》
《bean id="personServiceBean" class="cn.itcast.service.impl.PersonServiceBean"
lazy-init="true" init-method="init" destroy-method="destory"》

《!-- ref属性对应id personDao值  name属性对应接口的getter方法名称--》

《property name="personDao" ref="personDao" /》

《!-- 体验3 --》

《!-- 注入属性值 --》
《property name="name" value="123"/》

《!-- Set的注入 --》

《property name="sets"》
《set》
《value》sets:第一个值《/value》
《value》sets:第二个值《/value》
《value》sets:第三个值《/value》
《/set》
《/property》

《!-- List的注入 --》

《property name="lists"》
《list》
《value》lists:第一个值《/value》
《value》lists:第二个值《/value》
《value》lists:第三个值《/value》
《/list》
《/property》

《!-- Properties的注入 --》

《property name="properties"》
《props》
《prop key="props-key1"》:第一个值《/prop》
《prop key="props-key2"》:第二个值《/prop》
《prop key="props-key3"》:第三个值《/prop》
《/props》
《/property》

《!-- Map的注入 --》

《property name="maps"》
《map》
《entry key="maps-key1" value=":第一个值" /》
《entry key="maps-key2" value=":第二个值" /》
《entry key="maps-key3" value=":第三个值" /》
《/map》
《/property》

《/bean》
2、静态工厂:

《!-- 静态工厂获取bean --》

《bean id="personService2" class="com.persia.PersonServiceBeanFactory" factory-method="createInstance"/》 
对应类
public static PersonServiceBean createInstance(){ 
return new PersonServiceBean(); 
}
3、 实例工厂:

没有静态方法,因此配置时,先实例化工厂,在实例化需要的bean。

《!-- 实例工厂获取bean,先实例化工厂再实例化bean--》

《bean id="fac" class="com.persia.PersonServiceBeanInsFactory"/》
《bean id="personService3" factory-bean="fac" factory-method="createInstance"/》

对应类
public PersonServiceBean createInstance(){ 
return new PersonServiceBean();
}

2. bean的作用域:
默认情况为单例方式:scope=”singleton”

singleton

单实例作用域,这是Spring容器默认的作用域,使用singleton作用域生成的是单实例,在整个Bean容器中仅保留一个实例对象供所有调用者共享引用。单例模式对于那些无会话状态的Bean(如辅助工具类、DAO组件、业务逻辑组件等)是最理想的选择。

prototype

原型模式,这是多实例作用域,针对每次不同的请求,Bean容器均会生成一个全新的Bean实例以供调用者使用。prototype作用域非常适用于那些需要保持会话状态的Bean实例,有一点值得注意的就是,Spring不能对一个prototype Bean的整个生命周期负责,容器在初始化、装配好一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。因此,客户端要负责prototype实例的生命周期管理。

request

针对每次HTTP请求,Spring容器会根据Bean的定义创建一个全新的Bean实例, 且该Bean实例仅在当前HTTP request内有效,因此可以根据需要放心地更改所建实例的内部状态, 而其他请求中根据Bean定义创建的实例,将不会看到这些特定于某个请求的状态变化。 当处理请求结束,request作用域的Bean实例将被销毁。该作用域仅在基于web的Spring ApplicationContext情形下有效。

session

针对某个HTTP Session,Spring容器会根据Bean定义创建一个全新的Bean实例,且该Bean实例仅在当前HTTP Session内有效。 与request作用域一样,我们可以根据需要放心地更改所创建实例的内部状态,而别的HTTP Session中根据Bean定义创建的实例, 将不会看到这些特定于某个HTTP Session的状态变化。 

当HTTP Session最终被废弃的时候,在该HTTP Session作用域内的Bean实例也会被废弃掉。该作用域仅在基于Web的Spring ApplicationContext情形下有效。

global session

global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的Web应用中才有意义。portlet规范定义了全局Session的概念,它被所有构成某个portlet Web应用的各种不同的portlet所共享。

在global session作用域中定义的Bean被限定于全局portlet Session的生命周期范围内。如果我们是在编写一个标准的基于Servlet的Web应用,并且定义了一个或多个具有global session作用域的Bean,系统会使用标准的HTTP Session作用域,并且不会引起任何错误。该作用域仅在基于Web的Spring ApplicationContext情形下有效。

3、 bean的生命周期

(1)什么时候实例化?

对于单例的形式,在容器实例化的时候对bean进行实例化的。www.cdtarena.com

ApplicationContext ctx=new ClassPathXmlApplicationContext(new String{"applicationContext.xml"});

单实例可以通过lazy-init=”true”,在getBean时进行实例化。

在beans里面default-lazy-init=”true”对所有bean进行延迟处理。

对于prototype,则是在getBean的时候被实例化的。

(2)在bean被实例化之后执行资源操作等方法:

Init-method=””

(3)在bean销毁之前执行的方法:

Destroy-method=””

什么时候被销毁?随着spring容器被关闭时被销毁。

调用spring容器的close方法来正常关闭。以前是随着应用程序执行完而关闭。


在Spring装载配置文件后,Spring工厂实例化完成,开始处理

(1)使用默认构造方法或指定构造参数进行Bean实例化。

(2)根据property标签的配置调用Bean实例中的相关set方法完成属性的赋值。

(3)如果Bean实现了BeanNameAware接口,则调用setBeanName()方法传入当前Bean的ID。

(4)如果Bean实现了BeanFactoryAware接口,则调用setBeanFactory()方法传入当前工厂实例的引用。

(5)如果Bean实现了ApplicationContextAware接口,则调用setApplicationContext()方法传入当前ApplicationContext实例的引用。

(6)如果有BeanPostProcessor与当前Bean关联,则与之关联的对象的postProcess- BeforeInitialzation()方法将被调用。

(7)如果在配置文件中配置Bean时设置了init-method属性,则调用该属性指定的初始化方法。

(8)如果有BeanPostProcessor与当前Bean关联,则与之关联的对象的postProcess- AfterInitialzation()方法将被调用。

(9)Bean实例化完成,处于待用状态,可以被正常使用了。

(10)当Spring容器关闭时,如果Bean实现了DisposableBean接口,则destroy()方法将被调用。

(11)如果在配置文件中配置Bean时设置了destroy-method属性,则调用该属性指定的方法进行销毁前的一些处理。

(12)Bean实例被正常销毁。

servletoutputstream怎么初始化

servletoutputstream初始化方法如下。
1、第一种是带参初始化。
2、第二种是无参初始化。
3、第三种是重写init方法,进行额外的初始化准备。①获取初始化参数值。②ServletContext和context-param。

servlet的初始化init方法什么时候被调用

有时候希望在servlet首次载入时,执行复杂的初始化任务,但并不想每个请求都重复这些任务的时候,用init()方法他在servlet初次创建时被调用,之后处理每个用户的请求时,则不在调用这个方法。因此,他主要用于一次性的初始化,和applet的init方法相同。
由于servlet初始化参数的使用非常依赖于部署描述文件(web.xml),该文件可存放servlet所需要的起始参数以及web应用程序的结构数据。当servlet容器读取web.xml文件内容后。可以将这些起始参数封装成一个对象并在调用init方法时传递个servlet,这个对象就是ServletConfig对象所以我们可以在Servlet内覆写init方法,并通过ServletCongig对象来取得某些初始参数。
以init参数的名称为参数,调用ServletConfig的getInitParameter方法。返回值就是init参数的值。

用户对servlet发出http请求时,相应的servlet类的构造方法就会被调用一次

init方法只会被调用一次。也就是构造方法被调用一次
这是因为servlet是运行在服务器端的,如果每次都构造的话,代价太大了。

servlet的生命周期有哪几个阶段

您好,
Servlet生命周期分为三个阶段:
  1、初始化阶段 , 调用init()方法;
  2、响应客户请求阶段, 调用service()方法;
  3、终止阶段, 调用destroy()方法。
希望对您有帮助,如果有,请采纳,谢谢!!

文章分享结束,servlet初始化阶段和请求Servlet时,部署Servlet的容器要执行哪些步骤的答案你都知道了吗?欢迎再次光临本站哦!

servlet初始化阶段(请求Servlet时,部署Servlet的容器要执行哪些步骤)

本文编辑:admin

更多文章:


mariadb忘记密码(mysql用户密码忘记了怎么办)

mariadb忘记密码(mysql用户密码忘记了怎么办)

大家好,mariadb忘记密码相信很多的网友都不是很明白,包括mysql用户密码忘记了怎么办也是一样,不过没有关系,接下来就来为大家分享关于mariadb忘记密码和mysql用户密码忘记了怎么办的一些知识点,大家可以关注收藏,免得下次来找不

2026年10月15日 07:50

mysql端口号(如何查看自己数据库的端口号)

mysql端口号(如何查看自己数据库的端口号)

“mysql端口号”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看mysql端口号(如何查看自己数据库的端口号)!

2026年10月15日 06:30

printf打印16进制(C语言 十六进制怎么输出)

printf打印16进制(C语言 十六进制怎么输出)

大家好,今天小编来为大家解答以下的问题,关于printf打印16进制,C语言 十六进制怎么输出这个很多人还不知道,现在让我们一起来看看吧!

2026年10月15日 06:00

avantage怎么设置为中文(Avantage安装丢失GIT)

avantage怎么设置为中文(Avantage安装丢失GIT)

大家好,如果您还对avantage怎么设置为中文不太了解,没有关系,今天就由本站为大家分享avantage怎么设置为中文的知识,包括Avantage安装丢失GIT的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月15日 03:00

ospf协议的作用是什么(OSPF路由协议的作用是什么)

ospf协议的作用是什么(OSPF路由协议的作用是什么)

“ospf协议的作用是什么”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看ospf协议的作用是什么(OSPF路由协议的作用是什么)!

2026年10月15日 02:40

方案对比特效js(在一个网页中如何实现两个JS特效)

方案对比特效js(在一个网页中如何实现两个JS特效)

各位老铁们好,相信很多人对方案对比特效js都不是特别的了解,因此呢,今天就来为大家分享下关于方案对比特效js以及在一个网页中如何实现两个JS特效的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年10月15日 02:10

activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)

activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)

今天给各位分享登陆视频监控网页时提示activex控件未注册,怎么解决的知识,其中也会对登陆视频监控网页时提示activex控件未注册,怎么解决进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月14日 20:30

学生信息管理系统c语言(用C语言编程学生信息管理系统!)

学生信息管理系统c语言(用C语言编程学生信息管理系统!)

今天给各位分享用C语言编程学生信息管理系统!的知识,其中也会对用C语言编程学生信息管理系统!进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月14日 20:20

excel连接sql数据库教程(excel怎么连接sql数据库)

excel连接sql数据库教程(excel怎么连接sql数据库)

本篇文章给大家谈谈excel连接sql数据库教程,以及excel怎么连接sql数据库对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月14日 19:40

null s brawl(null和空字符有区别吗)

null s brawl(null和空字符有区别吗)

今天给各位分享null和空字符有区别吗的知识,其中也会对null和空字符有区别吗进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月14日 19:00

最近更新

广告推广app(常见的app推广方式)
2026-10-15 09:20:01 浏览:0
热刺vs马赛比赛(热刺赛程比分)
2026-10-15 09:10:01 浏览:0
热门文章

标签列表