etmvc框架对URL路由的支持 - shuzheng/etmvc GitHub Wiki

etmvc框架使用路由技术实现把URL映射到控制器类中的action方法上,典型的http://localhost:8080/xxx/user/show将映射到UserController类中的show方法上,实际上这个规则是允许改变的。etmvc框架将允许你自定义自已的匹配规则来映射你的控制器类及其行为,这就需要定义路由。

一个路由的定义由一些占位符组成,占位符由美元符后面跟着字母组成,如“$controller/$action/$id”,这是框架采用的默认路由。根据这个路由,下面的这些例子将被匹配:

URL CONTROLLER ACTION ID
/user UserController index
/user/show UserController show
/blog/show/123 BlogController show 123

如果没匹配到$action,则将默认使用index方法。

定义一个新的路由时,必须实例化Route,如下面的这个例子:

Route route = new Route("blog/$year/$month/$day", DefaultRouteHandler.class);
route.setController("blog");
route.setAction("show");
RouteTable.addRoute(0, route);

其中我们定义了嵌入式变量$year,$month,$day,这个路由规划将能够映射到BlogController类中的方法:

public String show(int year, int month, int day) {
	return year + "-" + month + "-" + day;
}

嵌入式变量将自动映射成方法的参数。

可以定义多个路由规则,匹配是顺序进行的,也将是在路由表中从第一个规则开始进行匹配,找到就按照这个路由查找控制器类和方法。

在上面的例子中,这些URL将会有如下的映射:

URL CONTROLLER ACTION
/blog/2009/07/10 BlogController show
/user/list UserController list
/product/show ProductController show

利用路由技术可以提供非常优雅的URL,一看URL就知道是那个控制器类和方法在处理。

最后有一点需要注意的是:定义一个路由后必须将它加入路由表中,并且确保在应用程序启动时是可用的。