|
||||
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。其他的分發器也這麼做。 這樣就可以避免同一個檔案被程式員們同時修改,因為應用程式級別的配置檔案,被同時修改的可能性,遠遠超過了單個的請求分發處理器類。 |
|||