1、根据请求URL映射到控制器和操作的功能由RouteTable进行登记,比如系统默认会有这样的映射规则:
Route defaultRoute = new Route("$controller/$action/$id", DefaultRouteHandler.class); routes.add(defaultRoute);
即按照“控制器/动作/ID”的方式进行匹配,使用默认的路由处理DefaultRouteHandler,在映射控制器时支持分包功能,将控制器类可以按包分成多个控制器包。比如:
http://localhost:8084/myweb/ca/config/test/23将映射成{controller="controllers.ca.ConfigController",action="test",id="23"}
http://localhost:8084/myweb/user/login将映射成{controller="controllers.UserController",action="login"}
2、可以自定义路由规则,比如
Route route = new Route("blog/$year/$month/$day", "blog", "show", DefaultRouteHandler.class); RouteTable.addRoute(0, route);
将插入新的路由规则,其优先级在默认路由之上,这时
http://localhost:8084/myweb/blog/2008/02/03将映射成{controller="blog",action="show"},并设置参数year,month,day。
3、可以实现RouteHandler接口,以实现自定义路由映射处理方法。
GRAILS的控制器还没能进行分包,ROR可以按模块进行划分,ET-MVC对controller的匹配是可以进行分包。欢迎大家讨论一下这种路由映射规则如何?