約定模式(Convention Mode)
名詞解釋:約定優於配置(Convention Over Configuration),也稱為依約編程,是一種軟體設計範式,透過命名規則之類的限制來減少程式中的配置,旨在減少軟體開發人員需要做決定的數量,獲得簡單的好處,而又不失靈活性。
有些時候我們只是為了能夠存取一個視圖檔案而不得不編寫一個控制器方法與之對應,當這種重複性的工作很多時,就變成了災難,因此,在WebMVC模組中,透過開啟約定模式即可支援直接存取base_view_path
路徑下的視圖文件,無需編寫任何程式碼;
WebMVC模組的約定模式預設為關閉狀態,需要透過設定參數開啟:
ymp.configs.webmvc.convention_mode=true
存取權限規則設定
在約定模式模式下,支援設定不同路徑的存取權限,規則是:-
號代表禁止訪問,
或無符串代表允許訪問,多個路徑間以|
分隔;
訪問權限範例:禁止存取admin目錄和index.jsp文件,目錄結構如下:
WEB-INF\ | |--templates\ | | | +--admin\ | | | +--users\ | | | +--reports\ | | | +--index.jsp | | | <...>
範例參數配置:
##
ymp.configs.webmvc.convention_view_paths=admin-|index-|users|reports+
攔截器規則配置
由於在約定模式下,存取檢視檔案無需控制器,所以無法透過控制器方法新增攔截器配置,因此,WebMVC模組針對約定模式單獨提供了攔截器規則配置此擴充功能,主要是透過@InterceptorRule配合IInterceptorRule介面使用;攔截器規則設定預設為關閉狀態,需要透過設定參數開啟:ymp.configs.webmvc.convention_interceptor_mode=true
###請求參數的引用:
@InterceptorRule("/demo") @Before(WebUserSessionCheck.class) public class InterceptRuleDemo implements IInterceptorRule { @InterceptorRule("/admin/*") @Before(AdminTypeCheckFilter.class) public void adminAll() { } @Clean @InterceptorRule("/admin/login") public void adminLogin() { } @InterceptorRule("/user/*") public void userAll() { } @InterceptorRule("/mobile/person/*") public void mobilePersonAll() { } }
說明:
@InterceptorRule:攔截器規則註解;
- 在實作IInterceptorRule介面的類別上聲明,表示該類別為攔截規則配置;
- 在類別方法上聲明,表示針對一個特定的請求路徑配置規則,與@RequestMapping的作用相似;
規則配置中支援的註解:
- @Before:約定模式下的攔截器僅支援@Before前置攔截;
- @Clean:清理上層指定的攔截器;
- @ContextParam:上下文參數;
- @ResponseCache:宣告控制器方法傳回視圖物件的執行結果將會被快取;
#注意:配置規則類別的方法可以是任意的,方法本身無任何意義,僅是透過方法使用註解;
URL偽靜態
WebMVC模組透過約定模式可以將參數融合在URL中,不再透過?
傳遞參數,讓URL看上去更好看一些;
偽靜態模式預設為關閉狀態,需要透過設定參數開啟:
ymp.configs.webmvc.convention_urlrewrite_mode=true
參數傳遞規則:
- URL中透過分隔符號
_
傳遞多個請求參數;- 透過
UrlParams[index]
方式引用參數值;
偽靜態範例:
URL原始格式: http://localhost:8080/user/info/list?type=all&page=2&page_size=15 URL伪静态格式: http://localhost:8080/user/info/list_all_2_15
// 通过EL表达式获取参数 ${UrlParams[0]}:all ${UrlParams[1]}:2 ${UrlParams[2]}:15
注意:偽靜態參數必須是連續的,UrlParams參數集合儲存在Request作用域內;
約定模式完整的設定參數
#
#------------------------------------- # 约定模式配置参数 #------------------------------------- # 是否开启视图自动渲染(约定优于配置,无需编写控制器代码,直接匹配并执行视图)模式,可选参数,默认值为false ymp.configs.webmvc.convention_mode= # Convention模式开启时视图文件路径(基于base_view_path的相对路径,'-'号代表禁止访问,'+'或无符串代表允许访问),可选参数,默认值为空(即不限制访问路径),多个路径间用'|'分隔 ymp.configs.webmvc.convention_view_paths= # Convention模式开启时是否采用URL伪静态(URL中通过分隔符'_'传递多个请求参数,通过UrlParams[index]方式引用参数值)模式,可选参数,默认值为false ymp.configs.webmvc.convention_urlrewrite_mode= # Convention模式开启时是否采用拦截器规则设置,可选参数,默认值为false ymp.configs.webmvc.convention_interceptor_mode=