beetl-spring Beetl的Spring整合擴展(2):Beetl與Spring MVC整合


二、Beetl與Spring MVC整合

  本章主要介紹通過beetl-spring完成Beetl與Spring MVC整合的功能。和Beetl自帶的BeetlSpringViewResolver及BeetlSpringView相比,本項目提供的BeetlViewResolver增強了視圖解析器的功能,使多視圖解析器各自使用各自的GroupTemplate以使用不同的Beetl配置成為可能。

2.1 BeetlViewResolver

  BeetlViewResolver是一個Spring MVC視圖解析器實現,它具有以下屬性,都是可選的:

 

參數名 參數類型

說明

常規配置屬性

 contentType
 String

用於指定Http響應包Content-Type頭

默認MIME類型為text/html 字符集通過GroupTemplate使用的ResourceLoader的charset推斷(如果無法獲取則取當前JVM進程的默認字符集)

 prefix,suffix  String

使用模版path的前綴和后綴 默認都為空字符串

BeetlView以如下方式進行字符串拼接以得到實際傳給Beetl ResourceLoader的模版path:

path = prefix + viewName + suffix;

多視圖解析器配置屬性

 groupTemplate  GroupTemplate

該視圖解析器所使用的GroupTemplate實例

默認視圖解析器會取Spring上下文中唯一的GroupTemplate

如果Spring上下文中有多個GroupTemplate,該屬性必須設置

 order  int

配置視圖解析器的優先級

值越小優先級越高,默認為0。當Spring上下文中有多個視圖解析器時,必須設置

詳情請參見本章2.3小節。

 viewNames  List<String>

配置若干個帶*號通配符表示的視圖名表達式,只有視圖名匹配其中一個表達式才會被當前視圖解析器處理(在多視圖解析器的環境下,如果當前視圖解析器判定不能處理該視圖名,就會讓下一個解析器嘗試處理)

默認所有接收到的視圖名都被當前視圖解析器處理,通常在多視圖解析器環境下應該設置。

2.2 視圖名與BeetlView

  BeetlView由BeetlViewResolver根據視圖名產生。一般不手工生成該對象(在使用時,BeetlView需要Spring注入一些必須的環境數據)。

  並不是所有的視圖名BeetlViewResolver都一定產生BeetlView實例,有兩種特殊的情況:

視圖名

說明
以"redirect:"為前綴時

表示重定向,不產生BeetlView渲染模版,而直接通過Servlet的機制返回重定向響應

redirect:前綴后面的內容為重定向地址,可以采用相對地址(相對當前url),絕對地址(完整的url)

如果采用/開頭的地址,會自動的在前面接上當前Web應用的contentPath,即contentPath為test的Web應用中使用

redirect:/admin/login.html 實際重定向地址為 ${contentPath}/admin/login.html

以"forward:"為前綴時

表示轉發,不產生BeetlView渲染模版。而是直接通過Servlet的機制轉發請求(關於轉發和重定向的區別,請自行查看Servlet API)

forward:前綴后面的內容為轉發地址,一般都是以/開頭相對於當前Web應用的根目錄

其他 產生BeetlView渲染模版輸出響應

2.3 Spring多視圖解析器配置

  Spring上下文中,如果有多個視圖解析器實例存在,會按照視圖解析器的order設置從小到大對他們進行排序處理。(這里說的視圖解析器主要是說的是UrlBasedViewResolver的實現子類,只有它才支持多視圖解析器並存,大部分的Spring視圖解析器類都是UrlBasedViewResolver的子類)。

  判斷一個視圖是否由該視圖解析器處理,核心的方法是UrlBasedViewResolver的canHandle(),將視圖名傳入返回true/false以表示該視圖名是否能處理,與上文描述的一樣,默認的canHandle()實現是通過比對視圖名對viewNames屬性設置的視圖名匹配表達式來完成的。如果canHandle()返回true,則視圖會交給該解析器的resolveViewName()方法以返回對應的View實例,否則交給排在后面的視圖解析器處理。

 

  對Beetl與Spring MVC整合及多視圖解析器的配置,請參見beetl-spring-web-example示例


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM