|
||||
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。其他的分发器也这么做。 这样就可以避免同一个文件被程序员们同时修改,因为应用程序级别的配置文件,被同时修改的可能性,远远超过了单个的请求分发处理器类。 |
|||