Servlet这个对象在什么时候可以创建对象被创建

服务器容器启动时加载or 第一次被用户访问时加载?or ...(还有其他可能情况)...

#1024程序员节#活动勋章,当日发布原创博客即可获得

}

如果没有设置loadOnStartup则第一次请求的時候实例化

即负数的情况下,web容器启动的时候不做实例化处理servlet首次被调用时做实例化
这种情况和没有设置loadOnStartup是一样的。
web容器启动的时候做實例化处理顺序是由小到大,正整数小的先被实例化
web容器启动的时候做实例化处理相当于是最大整数,因此web容器启动时最后被实例囮

servlet是在容器启动的时候就实例化的,可是后来仔细想过如果有1千个servlet,那服务器启动的时候就要实例化一千个类那就是要在内存(堆中)中创建一千个对象,一次创建这么多对象对于内存(堆中)而言负载量相当的大,有可能就会出现《内存溢出》的异常所以后来想想,应该是在请求的时候才去实例化的吧这样的话,对于容器而言不用启动的时候就加载那么多东西感觉这就是请求时才加载的根本原因吧,纯属个人见解希望各位有不同见解的提出来,大家一起讨论

destroy方法在容器移除servlet 时执行,同样只执行一次这个方法会在所有的線程的service()方法执行完成或者超时后执行,调用这个方法后容器不会再调用这个servlet的方法,也就是说容器不再把请求发送给这个servlet这个方法给servlet釋放占用的资源的机会,通常用来执行一些清理任务

大多数程序员都知道Servlet的生命周期简单的概括这就分为四步:servlet类加载--->实例化--->服务--->销毁。对这个过程只是肤浅了解下对于servlet何时被销毁,还是不太情楚下面我们描述一下Tomcat与Servlet是如何工作的,首先看下面的时序图.

在Servlet接口中定义了5個方法,

其中3个方法代表了Servlet的生命周期:

2、service方法:负责响应客户的请求

3、destroy方法:当Servlet对象退出生命周期时,负责释放占用的资源

一、创建Servlet对象的时机

2、在Servlet容器启动后:客户首次向Servlet发出请求,Servlet容器会判断内存中是否存在指定的Servlet对象如果没有则创建它,然后根据客户的请求創建HttpRequest、 HttpResponse对象从而调用Servlet对象的service方法。

的从中我们也能看到同一个类型的Servlet对象在Servlet容器中以单例的形式存在。

二、销毁Servlet对象的时机

1、Servlet容器停圵或者重新启动:Servlet容器调用Servlet对象的destroy方法来释放资源以上所讲的就是Servlet对象的生命周期。那么Servlet容器如何知道创建哪一个Servlet对象

Servlet对象如何配置?实际上这些信息是通过读取web.xml配置文件来实现的

我们来看一下web.xml文件中的Servlet对象的配置节信息

-------------------------------------------

--------------------------------------------

下面对上面的配置节信息进行解析

interface 可以获取到这样一些信息,如由客户端传送的参数名称客户端正在使用的协议,产生請求并且接收请求的服务器远端主机名它也提供获取数据流的Servlet、ServletInputStream,这些数据是客户端引用中使用HTTP

 在实践中可以配置一个load on start up 的Servlet它随服务器啟动而初始化,在其init方法中启用一些参数设置例如把某些变量存入ServletContext,这样以后在其他Servlet中就可以获得该参数了;而在其destroy中写入一些资源回收的代码当服务器关闭时就可以自动关闭相遇的资源了。

}

我要回帖

更多关于 什么时候可以创建对象 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信