我正在实现一个Java企业应用程序并为每个请求声明一个Filter,所以服务器如何跟踪这个请求,为每个请求创建一个新的过滤器对象,或者它们只是一个处理所有请求的过滤器,在其他单词是java web filter singletone?
答案 0 :(得分:15)
首先,让我们回顾一下Singleton Pattern(强调我的)的定义:
在软件工程中,单例模式是一种设计模式,将类的实例化限制为一个对象。
当您声明一个实现Filter
接口的类时,它需要一个public
构造函数(通常是默认构造函数),因此应用程序服务器可以实例化它。因此,通过这样做,Filter
不是单身。
请注意,应用程序服务器将维护单个实例每个应用程序上下文,例如每个已部署的Web应用程序,但这与拥有单例不同。为什么?因为您或其他程序员可能会不小心创建此类的实例(即使它没有使用该实例)。
答案 1 :(得分:1)
答案取决于您如何在web.xml中定义它。
例如,web.xml的这个片段,创建一个Filter1的对象
<filter>
<filter-name>Filter1</filter-name>
<filter-class>com.surasin.test.Filter1</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
但是这个web.xml的framgemet,创建了Filter1的两个对象
<filter>
<filter-name>Filter1</filter-name>
<filter-class>com.surasin.test.Filter1</filter-class>
<init-param>
<param-name>my-param</param-name>
<param-value>my-param-value</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>Filter1</filter-name>
<filter-class>com.surasin.test.Filter1</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>