As per the link http://www.xyzws.com/Servletfaq/when-is-destroy-of-servlets-called/20, one of the reason of calling destroy method is when the servlet hasn\'t got a
This is one of those classic spec vs implementation things. Servlet containers like Tomcat are allowed by the specification to maintain a pool of Servlet objects, creating and destroying them as load goes up or down. In this kind of setup, destroy would be called when the particular instance was no longer needed. It would even be legal to create a new instance for each request, calling init immediately before the request is processed and destroy straight after.
However in practice virtually every Servlet container maintains exactly one instance of each Servlet. Since Servlets are required to be thread safe this is also perfectly ok. In this scenario destroy is only called when the context is shutdown.
I can't think of many cases where you would want to pool the Servlets, but it is allowed by the spec.