It depends on how you define <load-on-start> element in web.xml
see Servlet spec here.
The load-on-startup element indicates that this servlet should be loaded (instantiated and have its init() called) on the startup of the web application. The optional contents of these element must be an integer indicating the order in which the servlet should be loaded. If the value is a negative integer, or the element is not present, the container is free to load the servlet whenever it chooses. If the value is a positive integer or 0, the container must load and initialize the servlet as the application is deployed. The container must guarantee that servlets marked with lower integers are loaded before servlets marked with higher integers. The container may choose the order of loading of servlets with the same load-on-start-up value.
It can be either way, if you specify <load-on-startup> in your DD(web.xml) with a a value greater than zero, then the container will instantiate and make the servlet ready to service requests. Whereas if you don't specify the above mentioned tag, the first request intiates the process.
1. Container loading it automatically 2. When the first request for the Servlet comes in.
For container loading, it can be configured in the deployment descriptor file(web.xml). If the load-on-startup attribute is used with a numerical value greater than 0, the container will load it automatically.