The controller lies at the heart of an MVC Model 2 application. In a Calyxo application, each module is associated with its own servlet. For an incoming request, a Calyxo module is selected by the servlet container, according to the url mappings, we associated with our modules. We call the selected module the current module.
The current module then selects an action and executes it. We say, "the action is invoked by the request". An action's execution results in information on how to dispatch the request. The module then dispatches to another action (optionally within another module) or to an application resource (for example, a JSP page). Technically spoken, the module uses a dispatcher, which usually performs a request forward (or include).
It is important to understand, that the current module exists only during requests handled by a Calyxo module. If you, for example, point your browser directly to a JSP page, there's no current module! If, on the other hand, a Calyxo action dispatches to that page, the action's module will still be the current module within the page.
Implementing actions is your part. They are the controller's end, that invoke your application specific business logic.
The Calyxo controller provides several extension points. Plugins are used to load extensions. Plugins may define filters, which are used to extend an action by a filter chain. Or, they may define dispatchers to customize request dispatching to particular targets. Please, consult the Calyxo Control documentation for more on this.