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