Or one can have some kind of RequestHandler class which responsibility is to populate the Request object. This happens differently for example if you application is called from command line.

A step further: the action controller can defines its parameters via the parameter list and the front controller can populate them via Reflection API. This way you controller seems like a real function.

@Lorna: to consider what to put to a controller is a good technique is to think about what would be if your controller should work in CLI.