Servlet Framework
88
to provide a servlet to handle the actual request. If no server object is found corresponding to that por-
tion of the URL namespace, or the server object is not able to provide a servlet to handle the request,
a HTTP error response is returned to the client indicating that the resource corresponding to the sup-
plied URL could not be found.
Where an appropriate servlet to handle the request is found, the session manager will initially pass off
to the servlet the details of the request. This will include the type of request, the URL and the contents
of any HTTP headers. The details initially provided to the servlet do not include any content associated
with the request. Any content associated with a request will subsequently be passed to the servlet as it
arrives. This will only occur though if the servlet wasn’t able to process the request based on the initial
information and does actually require the content.
In the majority of cases a request will not have any associated content and a servlet will be able to proc-
ess the request straight away. Even if there is no content however, the servlet isn’t obligated to send a
response immediately. This may be the situation if the servlet needs to wait until information from an-
other source arrives before it can form the response. In this scenario, the servlet might send a request
using the messaging framework to a remote service to obtain the information. When the response from
the remote service arrives, the servlet can then generate the response.
When the action of the servlet does depend on the content supplied with the request, the servlet would
accumulate the content as it arrives until the amount of content matches that given in the content length
header, or until some appropriate boundary is encountered. Now having all the content associated with
the request, the servlet can process the request and send a response. Alternatively it could again delay
the response if it needs to first send the content received to some remote service and wait for some re-
sponse.
When a servlet sends a response to the HTTP client, as long as the servlet generates a content length
in the HTTP headers, any request by a HTTP client to keep alive the session will be honoured. This
allows the HTTP client to submit additional requests using the same connection if desired. In general
the servlet framework adheres to the HTTP 1.0 protocol.
The HTTP Daemon
The Python class which listens for connection requests from HTTP clients is called HttpDaemon.
When creating the HTTP daemon, you need to tell it which port to listen on and also register with it
any HTTP server objects. When registering a HTTP server object, you need to identify which part of
the URL namespace it manages. Finally, you need to start the daemon so that once the dispatcher is
run it will actually listen and handle the requests.
dispatcher = netsvc.Dispatcher()
dispatcher.monitor(signal.SIGINT)
daemon = netsvc.HttpDaemon(8000)
filesrvr = netsvc.FileServer(os.getcwd())
daemon.attach("/",filesrvr)