約定模式(Convention Mode)

2018-12-24 22:52 更新

名詞解釋:約定優(yōu)于配置(Convention Over Configuration),也稱作按約定編程,是一種軟件設計范式,通過命名規(guī)則之類的約束來減少程序中的配置,旨在減少軟件開發(fā)人員需要做決定的數(shù)量,獲得簡單的好處,而又不失靈活性。

有些時候我們僅僅是為了能夠訪問一個視圖文件而不得不編寫一個控制器方法與之對應,當這種重復性的工作很多時,就變成了災難,因此,在WebMVC模塊中,通過開啟約定模式即可支持直接訪問base_view_path路徑下的視圖文件,無需編寫任何代碼;

WebMVC模塊的約定模式默認為關閉狀態(tài),需要通過配置參數(shù)開啟:

ymp.configs.webmvc.convention_mode=true
訪問權限規(guī)則配置

在約定模式模式下,支持設置不同路徑的訪問權限,規(guī)則是:-號代表禁止訪問,+或無符串代表允許訪問,多個路徑間用|分隔;

訪問權限示例:禁止訪問admin目錄和index.jsp文件,目錄結構如下:

WEB-INF\
|
|--templates\
|   |
|   +--admin\
|   |
|   +--users\
|   |
|   +--reports\
|   |
|   +--index.jsp
|   |
|   <...>

示例參數(shù)配置:

ymp.configs.webmvc.convention_view_paths=admin-|index-|users|reports+
攔截器規(guī)則配置

由于在約定模式下,訪問視圖文件無需控制器,所以無法通過控制器方法添加攔截器配置,因此,WebMVC模塊針對約定模式單獨提供了攔截器規(guī)則配置這一擴展功能,主要是通過@InterceptorRule配合IInterceptorRule接口使用;

攔截器規(guī)則設置默認為關閉狀態(tài),需要通過配置參數(shù)開啟:

ymp.configs.webmvc.convention_interceptor_mode=true

攔截規(guī)則配置示例:

@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:攔截器規(guī)則注解;

  • 在實現(xiàn)IInterceptorRule接口的類上聲明,表示該類為攔截規(guī)則配置;
  • 在類方法上聲明,表示針對一個具體的請求路徑配置規(guī)則,與@RequestMapping的作用相似;

規(guī)則配置中支持的注解:

  • @Before:約定模式下的攔截器僅支持@Before前置攔截;
  • @Clean:清理上層指定的攔截器;
  • @ContextParam:上下文參數(shù);
  • @ResponseCache:聲明控制器方法返回視圖對象的執(zhí)行結果將被緩存;

注意:配置規(guī)則類的方法可以是任意的,方法本身無任何意義,僅是通過方法使用注解;

URL偽靜態(tài)

WebMVC模塊通過約定模式可以將參數(shù)融合在URL中,不再通過?傳遞參數(shù),讓URL看上去更好看一些;

偽靜態(tài)模式默認為關閉狀態(tài),需要通過配置參數(shù)開啟:

ymp.configs.webmvc.convention_urlrewrite_mode=true

參數(shù)傳遞規(guī)則:

  • URL中通過分隔符_傳遞多個請求參數(shù);
  • 通過UrlParams[index]方式引用參數(shù)值;

偽靜態(tài)示例:

URL原始格式:
http://localhost:8080/user/info/list?type=all&page=2&page_size=15

URL偽靜態(tài)格式:
http://localhost:8080/user/info/list_all_2_15

請求參數(shù)的引用:

// 通過EL表達式獲取參數(shù)
${UrlParams[0]}:all
${UrlParams[1]}:2
${UrlParams[2]}:15

注意:偽靜態(tài)參數(shù)必須是連續(xù)的,UrlParams參數(shù)集合存儲在Request作用域內;

約定模式完整的配置參數(shù)
#-------------------------------------
# 約定模式配置參數(shù)
#-------------------------------------

# 是否開啟視圖自動渲染(約定優(yōu)于配置,無需編寫控制器代碼,直接匹配并執(zhí)行視圖)模式,可選參數(shù),默認值為false
ymp.configs.webmvc.convention_mode=

# Convention模式開啟時視圖文件路徑(基于base_view_path的相對路徑,'-'號代表禁止訪問,'+'或無符串代表允許訪問),可選參數(shù),默認值為空(即不限制訪問路徑),多個路徑間用'|'分隔
ymp.configs.webmvc.convention_view_paths=

# Convention模式開啟時是否采用URL偽靜態(tài)(URL中通過分隔符'_'傳遞多個請求參數(shù),通過UrlParams[index]方式引用參數(shù)值)模式,可選參數(shù),默認值為false
ymp.configs.webmvc.convention_urlrewrite_mode=

# Convention模式開啟時是否采用攔截器規(guī)則設置,可選參數(shù),默認值為false
ymp.configs.webmvc.convention_interceptor_mode=
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號