是Java Filter Singleton

时间:2014-02-12 06:49:24

标签: java java-ee servlet-filters

我正在实现一个Java企业应用程序并为每个请求声明一个Filter,所以服务器如何跟踪这个请求,为每个请求创建一个新的过滤器对象,或者它们只是一个处理所有请求的过滤器,在其他单词是java web filter singletone?

2 个答案:

答案 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>