In regards to your question 2):
Servlets don't really sent "instructions" to browsers, they construct a response in some way. They may (but probably don't) send the headers right away, or send the headers when you try to write the body of the response for the first time, when you fill some internal buffer, or they may buffer all of the whole response until you're done. The term for the headers having been sent out is that the response has been "committed", and while you can determine if this has occured for a given response, you can't really prevent it from happening from the API. (I've tried looking at the implementation of Jetty 6 to see what happens but the code is anything but straightforward, which seems to imply container implementations have some leeway here.)
Also, when a servlet is requested for the first time, the servlet is probably instantiated by the container. (Unless it was instantiated before because you set <load-on-startup>1</load-on-startup>
in web.xml
, or maybe because the container chose to do so - I'm not sure if implementations are allowed to do that.)