Actually, container doesn't really do pooling for servlet instances. There is a seperate thread for every request entertained by the same servlet instance. Container might create multiple instances of a servlet when it like to. You need not bother with this thing.
To the best of my knowledge, there isn't anything in the spec requiring servlet pooling. So, yes, this would be container specific.
SRV.2.2.1 Note About The Single Thread Model
The use of the SingleThreadModel interface guarantees that only one thread at a time will execute in a given servlet instance's service method. It is important to note that this guarantee only applies to each servlet instance, since the container may choose to pool such objects. Objects that are accessible to more than one serv- let instance at a time, such as instances of HttpSession, may be available at any par- ticular time to multiple servlets, including those that implement SingleThreadModel. It is recommended that a developer take other means to resolve those issues instead of implementing this interface, such as avoiding the usage of an instance variable or synchronizing the block of the code accessing those resources. The SingleThreadModel Interface is deprecated in this version of the specification.
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com