请问 servlet过滤器
是每次有请求 都要被tomcat new一个实例的吗
亦或是全局共享的?
每次请求都会创建一个servlet实例和filter实例:
两者的生命周期如下:
filter:init()---启动服务
servlet:init()
filter:service()---请求
servlet:service()
servlet:destroy()
filter:destroy()---关闭服务
8 回答6.4k 阅读
1 回答4.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
3 回答1.7k 阅读✓ 已解决
1 回答2k 阅读✓ 已解决
在Servlet规范中,对于Servlet单例与多例定义如下:
上面规范提到,
如果一个Servlet没有被部署在分布式的环境中,一般web.xml中声明的一个Servlet只对应一个实例。
而如果一个Servlet实现了SingleThreadModel接口,就会被初始化多个实例。实例有多少呢,这里没细说。
那一个实现了SingleThreadModel接口的Servlet,一般会初始化多少个实例呢?
StandardWrapper类中有两个属性,其中maxInstance初始为20。所以上面的问题就有了答案。
由于SingleThreadModel已经声明为废弃,官方不建议使用。我们这里只是让大家了解下。
总结下,一个Servlet究竟有几个实例呢?受如下几个原因影响:
是否在分布式环境中部署
是否实现SingleThreadModel,如果实现则最多会创建20个实例
在web.xml中声明了几次,即使同一个Servlet,如果声明多次,也会生成多个实例。