web頁面模塊化異步渲染:struts-gpipe
struts-gpipe 提供了將 groovy 引入 struts java web 項目的功能, web頁面模塊化異步渲染。
這個項目的初衷是為了將groovy引入我們的struts web項目,在開發的過程中,發現有跟多可以做的是全,不過在最初的版本,struts-gpipe主要包括兩個功能:
1,經過簡單的配置可以將groovy引入struts項目,這個時候我們可以將一些業務邏輯代碼從java code中提取出來放在groovy里面,至于為什么要把一些業務邏輯代碼放在groovy里面,這是因為我們可以利用groovy動態語言的特性,想一想,我們發布的時候再也不需要將java code編譯成class然后在deploy。或許我們可以一秒鐘搞定發布..這一點是振奮人心的..:)。但是這秒發的功能在struts-gpipe 在最初的版本中并沒有做,后面會陸續加入。
2,struts-gpipe的第二個主要功能是實現了異步響應的思想,我們通常的 web頁面都是將所有內容渲染完才返回到頁面的,如果這個頁面很笨重,那么用戶可能會遭遇到“白屏”的體驗,這對產品來說簡直是體驗大打折扣,struts-gpipe項目提供了將整個頁面拆分成若干模塊的功能,每一個模塊都獨立渲染,多個模塊并發渲染,我們可以讓一部分模塊渲染完成之后先返回給客戶端,讓另一部分模塊渲染之后后返回給客戶端,不用想,這樣用戶體驗會好很多。
struts-gpipe與struts和spring的整合:
1,struts-gpipe提供注入spring容器bean的功能,用法一致。
2,struts-gpipe提供ongl的功能,也就是會自動將模塊屬性引入 freemarker渲染,這一點是和spring mvc不同的,用過spring mvc的都知道,spring mvc向freemarker傳入數據需要往model傳入塞,而這一點struts使用了ongl技術,讓用戶不用寫塞數據的冗余代碼。
struts-gpipe開發的時候盡量考慮到了用戶的使用成本,因此將struts-gpipe引入項目配置起來相對還是比較簡單的,下面簡單介紹一下如何將struts-gpips引入我們的項目:
1.web.xml配置
<filter> <filter-name>struts2</filter-name> <filter-class>com.gweb.filter.GStrutsPrepareAndExecuteFilter</filter-class> <init-param> <param-name>config</param-name> <param-value>struts-default.xml,struts-gpipe.xml,struts-plugin.xml,struts/struts.xml</param-value> </init-param> </filter>
struts-gpipe過濾器繼承了StrutsPrepareAndExecuteFilter,在啟動的時候會初始化struts-gpipe容器。
2,struts.xml配置
<constant name="gweb.groovy.dir" value="biz" />
<package name="gweb" namespace="/index" extends="gpipe-default"> <action name="index" class="com.gweb.front.action.Index"> <result name="success" type="gweb">/WEB-INF/ftl/index.ftl</result> </action> </package>
第一個配置的struts常量是配置groovy腳本的的路徑,這個路徑可以相對resource目錄,第二個配置是需要使用struts-gpipe的package需要繼承gpipe-defaule的配置,第三個配置表示一種struts的返回類型。struts-gpipe為struts返回類型添加了一個類型“gweb”,struts-gpipe會代理處理index.ftl的渲染。
3,腳本示例代碼
@GPipeMapping("m1") @Asyn class M1 implements GPipe{private String m1;
@Override String execute() { m1 = "build by m1.groovy"; return "/WEB-INF/gpipe/m1.ftl" }
String getM1() { return m1 }
void setM1(String m1) { this.m1 = m1 } }</pre>
這里需要配置模塊的名字,渲染方式:同步還是異步,返回的ftl路徑。模塊的名字和主模塊里面名字對應:
sync: ${GPipe_m1}anyn: ${GPipe_m2}</pre>
其中GPipe_是我給模塊名字起的前綴,這個固定,后面的對應groovy腳本里面用注解配置的名字。
</span>