web頁面模塊化異步渲染:struts-gpipe

yn6e 9年前發布 | 18K 次閱讀 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腳本里面用注解配置的名字。

項目主頁:http://www.baiduhome.net/lib/view/home/1431254705138

</span>

 本文由用戶 yn6e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!