Question

I am implementing a Java enterprise application and declared a Filter for every request, so how does the server tracks this request, do it create a new filter object for every request, or their is only one filter handling all request, in other words are java web filter singletone?

Was it helpful?

Solution

First, let's review the definition of Singleton Pattern (emphasis mine):

In software engineering, the singleton pattern is a design pattern that restricts the instantiation of a class to one object.

When you declare a class that implements the Filter interface, it needs a public constructor (usually the default constructor) so the application server could instantiate it. Thus, by doing this, the Filter is not a singleton.

Note that the application server will maintain a single instance per application context e.g. per a deployed web application, but this is not the same as having a singleton. Why? Because you or another programmer can carelessly create an instance of this class (even if it doesn't make use of the instance).

OTHER TIPS

The answer is depended on how you define it in web.xml.

For example, this fragment of web.xml, create one object of 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>

But this framgemet of web.xml, create two objects of 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>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top