|
|
||||
| 1.0 其他语言 |
||||
3.3.5 网络请求分发器 URL 管理 |
||||
|
在 VelocityWeb 中,URL 总是像这个样子http://<server_ip>:<server:port>/<web_app_name>/<url_mapping_path>/ControllerServlet?m1=system&m2=store_main 这个 URL 中,最后部分 ?m1=system&m2=store_main 是由 VelocityWeb 的 URL 管理器管理的。为了产生这样的 URL,我们需要先将 "system" 加入到顶级 URL 中。
public class PetStoreController extends SimpleController {
...
public boolean initApplication() {
...
// add system dispatchers
DispatcherTreeManager.addToRoot(SystemDispatcherGroup.class);
这里的 "m1=system" 代表 SystemDispatcherGroup, "m2=store_main" 代表 StoreMainDispatcher.
public class SystemDispatcherGroup extends DispatcherGroup {
static{
DispatcherTreeManager.addParentChildrenRelationship(SystemDispatcherGroup.class, StoreMainDispatcher.class);
}
public SystemDispatcherGroup() {
this.setPageLayout(new VPetStorePageLayout());
}
public String getUrlId() {
return "system";
}
}
public class StoreMainDispatcher extends QueryDispatcher {
public String getUrlId() {
return "store_main";
}
public StoreMainDispatcher() {
按照这样的方法,这种 URL 可以表示叶分发器(LeafDispatcher)和分发器组(DispatcherGroup)。
Root
|
|____SystemDispatcherGroup(system)
|
|____StoreMainDispatcher(store_main)
VelocityWeb 中,这种树型结构的最大层次是没有限定的。这意味着可以写这样的 URL: 多数应用中, 这种树型结构的最大层次不超过五。 不使用 XML 文件来匹配 URL 和分发器的原因在于,当我们使用单一的 XML 文件来维护这种关系的时候,多个程序员同时维护这种配置文件会有很大麻烦。好的设计应该避免编程阶段,很多程序员持续地修改同一个文件。 VelocityWeb 试图避免集中式配置。从上面的代码中可以看出,StoreMainDispatcher 指定自己的显示页面和对应的 URL ID。其他的分发器也这么做。 这样就可以避免同一个文件被程序员们同时修改,因为应用程序级别的配置文件,被同时修改的可能性,远远超过了单个的请求分发处理器类。 |
|||