After constructor completes you get an servlet object not an object that has servletness.After that only the object gets servletness. Sevlet receives servletness after the constructor completes and container creates HttpRequest and HttpResponse objects for the servlet.
As you said, what is role of init(), because it is early to do some things in the constructor, and you don't have servletContext inside the constructor and obviously why should it be provided until our servlet object has not gotten the things it needs to have.
HFSJ: The container calls init() on the servlet instance after the servlet instance is created but before the servlet can service any requests;
inside init() you can do following: -->Think about Applets init() where we load images --> Creating database connection pool that will be used throughout. -->Loading data onto HashMap etc..