views:

54

answers:

2

suppose, I use Tomcat as a web container.

Is it true that once all the servlets found in a web-app/WEBAPPNAME

are init(IALIZED) then every change of a Servlet's property will be seen to every session.

So session 1 changes a property userName of a Servlet1 from "user1" to "user2"

session 1 is closed.

session 2 starts. It will see "user2" as the only value of Servlet1.userName property??

Any change of a Servlet's field will be seen to all subsequent sessions?

Are servlets singletons, aren't they?

+3  A: 

Any change of a Servlet's field will be seen to all subsequent sessions?

Practically yes. That is why it is strongly not recommended to store data directly within servlets, as servlets are not thread safe. Instead, data should be stored in the servlet context, the session or the request context.

Are servlets singletons, aren't they?

Sort of yes, in the sense that there is one instance of each configured servlet within the same servlet container.

Péter Török
+2  A: 

Yes, as long as you aren't using the SingleThreadModel, in which case there can be multiple instances of a Servlet. See e. g. http://docstore.mik.ua/orelly/java-ent/servlet/ch03_04.htm

In any case, I wouldn't rely on this. It's much better to write servlets in a way, that they don't depend on that.

Chris Lercher