grails采用了controller+action模式来处理请求,一个Controller可以包含多个action。Controller-action可以直接响应请求,或者委托给view来处理。
可以将action理解为一个处理请求的方法,而Controller是一组相关action的集合。如UserController可以包含login和logout两个action。
一。Controller
Controller的定义是grails-app/controllers/
目录中文件名以Controller结尾的groovy文件。action就是Controller内一个代码块。
每次请求都会创建一个新的Controller,所以Controller是线程安全的。
生成controller可以通过如下命令开始生成:
grails create-controller book
这样就会生成grails-app/controllers/BookController.groovy,根据默认的URI mapping对应的访问uri为/book,当然访问此uri的时候,会默认访问book中名称为index的action。
下面就是一个action的示例,此示例可以通过/book/list进行访问。
class BookController {
def list = {
// do controller logic
// create model
return model
}
}
如果我们想将list替代index作为访问此Controller的默认action,只需要在Controller中加入如下定义:
static defaultAction = "list"
Controller中参数的容器范围(Scope)除了有context,session,request意外,还多了一个flash,用以此次和下次访问。尤其跳转到错误提示页等类似场景时额外有用。
当action无显式指定view的时候,grails默认会查找SERVER/PROJECT/CONTOLLER/ACTION.jsp,如果找不到则再尝试访问SERVER/PROJECT/CONTOLLER/ACTION.gsp.