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.
A servlet can be loaded in two ways.
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.
Otherwise, by default it uses the second way.