Servlet核心基础

北京医治皮肤病医院 https://baijiahao.baidu.com/s?id=1708308198310460181&wfr=spider&for=pc
Servlet生命周期

生命周期:一个java对象从最初的创建到销毁,经历的所有过程。

Servlet对象的生命周期,程序员无权干涉,及servlet对象的相关方法的调用,程序员无权干涉。

Servlet对象的创建,使用,销毁整个过程都是web容器来管理的。Web容器管理servlet的生命周期

默认情况下,Servlet对象在web服务器启动阶段不会被实例化,若希望web服务器启动阶段实例化对象,需要进行特殊设置,在配置文件的servlet标签中加:

load-on-startup数字/load-on-startup

Servlet接口的方法

1、无参数构造方法

2、init方法

以上的两个方法执行时间几乎相同,执行次数都是一次。构造方法执行的时候对象正在创建,init方法执行后对象已经创建

若系统要求在对象创建时刻执行一段特殊程序,这段程序尽量写在init方法。

为什么不建议将代码编写到构造方法中?因为存在风险。当写构造方法的时候,可能会导致无参数方法不存在。

3、service方法

这个方法必须重写,在这个方法中需要完成业务逻辑的处理,请求的处理,以及完成响应。

4、destory方法

若希望在销毁时刻执行一段特殊的代码,需要将这个代码写在destroy方法中。自动被容器调用

5、getServletInfo方法

一般返回Servlet的版本、作者、所在应用等信息

6、getServletConfig方法

获取Servlet配置信息对象

运行流程

1)用户在浏览器地址栏上输入URL

2)web容器截取用户请求路径

3)web容器在容器上下文中找请求路径对应的Servlet对象

4)若没有找到对应的Servlet对象

4.1)通过web.xml文件中相关的配置信息(实际上是去Map集合找),得到请求路径对应的Servlet完整类名

4.2)通过反射机制,调用Servlet类的无参数构造方法完成Servlet对象的实例化

4.3)web容器调用Servlet对象的init方法完成初始化操作

4.4)web容器调用Servlet对象service方法提供服务

5)若找到对应的Servlet对象

web容器直接调用Servlet对象的service方法提供服务

6)web容器关闭的时候/webapp重新部署的时候/该Servlet对象长时间没有用户再次访问的时候,

web容器会将该Servlet对象销毁,在销毁该对象之前,web容器会调用Servlet对象的destroy方法完成销毁之前的准备。

总结

Servlet类的构造方法只执行一次

Servlet对象的init方法只执行一次

Servlet对象的service方法,只要用户请求一次,则执行一次

Servlet对象的destroy方法值执行一次

注意:

(1)init方法执行的时候,Servlet对象已经被创建好了

(2)destroy方法执行的时候,Servlet对象还没有被销毁,是即将被销毁。

Servlet对象只有一个

Servlet对象是单例(只有一个),但是不符合单例模式,只能称为伪单例。

真单例的构造方法是私有化的。

Tomcat服务器是支持多线程的。所以Servlet对象在单实例多线程的环境下运行的。那么Servlet对象中若有实例变量,并且实例变量涉及到修改操作,那么这个Servlet对象一定会存在线程安全问题,不建议在Servlet对象中使用实例变量,尽量使用局部变量。

Tips

Servlet对象实例化之后,这个对象存储在哪里?

大多数的web容器都是将该Servlet对象以及对应的url-pattern存储到Map集合了

在web容器中有这样的一个map集合

MapString,Servlet集合:

keyvalue----------------------------/addaddServlet对象引用/deletedeleteServlet对象引用

服务器在启动的时候就会解析各个wevapps的web.xml文件,将web.xml文件中的url-pattern和对应的Servlet完整类名存储到Map集合中了

MapString,String集合:

keyvalue-------------------------------/add


转载请注明:http://www.soiphoto.com/wyfl/wyfl/18194.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了