After either receiving or instantiating a Request object instance, the Dispatcher passes that
instance to the Router, which produces the parameters necessary to dispatch the request
(unless no route matches, in which case an exception is thrown).
Using these parameters, the Dispatcher loads and instantiates the correct Controller object,
and passes it the Request object instance. The Controller returns a Response object to the
Dispatcher, where the headers and content are rendered and sent to the browser.