我正在实现一个Java企业应用程序,并为每个请求声明了一个过滤器,那么服务器如何跟踪这个请求呢?它会为每个请求创建一个新的过滤器对象吗?还是只有一个过滤器处理所有请求,换句话说,Java Web过滤器是单例的吗?
我正在实现一个Java企业应用程序,并为每个请求声明了一个过滤器,那么服务器如何跟踪这个请求呢?它会为每个请求创建一个新的过滤器对象吗?还是只有一个过滤器处理所有请求,换句话说,Java Web过滤器是单例的吗?
首先,让我们复习一下单例模式的定义(重点在于“限制一个类只能实例化一个对象”)。
在软件工程中,单例模式是一种设计模式,它限制一个类只能实例化一个对象。
当你声明一个实现了Filter
接口的类时,它需要一个公共构造函数(通常是默认构造函数),以便应用服务器可以实例化它。因此,这样做的话,Filter
不是单例。
请注意,应用服务器将维护每个应用程序上下文的单个实例,例如每个部署的Web应用程序,但这并不等同于拥有单例。为什么?因为你或另一个程序员可能会疏忽地创建此类的实例(即使它不使用该实例)。
<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>
<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>