Controllers handle requests and prepare responses in Grails applications. A controller can generate a response directly or delegate to a view. Controllers are created using the "grails create-controller" command and stored in the grails-app/controllers directory. Controllers contain actions implemented as methods that perform logic and return a model. Earlier versions used closures but methods are now preferred. Controllers can be scoped as prototype, session, or singleton to control instance creation. Redirects between actions and controllers use the redirect method. Renders involve passing a view name and model. Annotations like @Secured control access.