JimStoneAjax如何跟DWR競爭?

    (JimStoneAjax交流羣:366984517)
html

     DWR是Ajax實現RIA一時無二的王者,它強大厚重而且飽經磨練。JimStoneAjax是同領域的新秀,靈活、輕巧且使用方便。 java

     JimStoneAjax能夠跟DWR競爭嘛?答案是確定的!咱們來看看它有哪些優勢居然可以跟DWR匹敵。 ajax

       一、配置簡單甚至無配置

        JimStoneAjax 配置簡單,甚至您能夠不須要進行任何配置。
瀏覽器

        使用JimStoneAjax默認狀況下是不須要任何配置的,根據使用環境,您可能但願自定義客戶端生成JS和執行JS方法的訪問路徑,那麼您就須要配置URL對腳本的訪問路徑。
緩存

       二、編寫Serivce無需配置便可在客戶端直接調用

        也許你們同時會想到這個裏邊的最關鍵的問題就是這樣安全性必定不好勁。可是偏偏相反,JimStoneAjax 巧妙的利用接口實現來屏蔽無關對象,只有實現自ISTAjaxModel接口的類才被標識爲「有效類」。
安全

        那麼一樣的問題,一個Java對象可能包含不少方法,不配置那豈不是方法全暴漏了!一樣這樣的擔憂也是不必的,由於它當前經過泛型返回值來絕對方法的有效性!不用擔憂,JimStoneAjax規定只有返回類型爲STDataResult和STAjaxView的方法才被容許被調用。 服務器

        STDataResult對象適用於大部分方法返回結果。它是一個飽經驗證的泛型類,可以適用與全部的場景,而且可以完美的給用戶提供更加詳細的方法反饋結果。主要屬性包含成功與否狀態stat,錯誤代碼errCode(用於國際化和精肯定位),方法返回說明message,返回數據datas。建立方法包含多種多樣,且很是靈活和可靠。 網絡

public STDataResult<Integer> maxFromArray(Integer[] list) {
	int count = list.length;
	int max = Integer.MIN_VALUE;
	for (int i=0; i<count; i++) {
		if (list[i] > max) {
			max = list[i];
		}
	}
	return STDataResult.succByMessage("max from array success", max);
}
        這個方法會被識別爲有效方法,在生成JS時能夠直接調用這個方法。


        因此根本不須要進行任何配置,實現了ISTAjaxModel接口的類將自動被識別並動態生成JS引用。
app

    三、支持項目當前環境中默認的控制器渲染結果做爲返回值
框架

        這個功能充滿創意而且真的很酷。

        剛纔咱們曾經提到過 STAjaxView 對象,這個對象神奇的地方在於,他可以自動的融入Spring MVC、Struts控制器等本地系統環境,您編寫的Service返回值能夠等同於Controller中方法的返回值,使用本地控制器渲染器自動渲染頁面結果,而且客戶端接收的數據爲渲染以後的頁面結果,So cool!

public STAjaxView getPageTop(HttpServletRequest request, HttpServletResponse response) {
		request.setAttribute("name", "JimStone");
		return render(
				"/test/top", 
				"email", 	"boychong2@126.com",
				"qq",		"123581766",
				"mobile",	"15221869351"
		);
	}

        客戶端調用後,返回數據將爲融入本地環境的渲染後的頁面。客戶端此時接收到的返回數據直接是頁面HTML內容。

testAjaxModel2.getPageTop('request', 'response', function(html){
	$('#test-get-page-top').html(html);
});


    四、方法參數調用靈活,支持傳遞request、response和自定義對象

        JimStoneAjax的框架設計很是靈活,您能夠自定義參數傳遞和轉換方法。

        經過上一個代碼片斷咱們看到,參數的傳遞包含了request和resonse。這樣咱們在使用過程當中基本上可以處理網絡應用中更多的複雜狀況。同時支持自定義參數轉換方法,您能夠編寫本身的方法轉換方法去更好的擴展功能。

        若是您須要傳遞自定義對象,您須要實現接口 ISTMethodParamLoader,而且加入配置項 jsajax.class.serviceLoader。

        若是項目沒有使用Spring,那麼您須要在配置文件中更換參數加載器爲 jsajax.class.methodParamLoader=com.jimstone.ajax.loader.STSimpleMethodParamLoader。若是須要熱部署或使用JRebel則請更換加參數加載器爲STSpringMethodParamLoader。

    五、天生支持Spring和Spring MVC,同時支持本身建立的JavaBean對象

        天生親和Spring MVC,但同時也能夠不依賴Spring環境,您徹底能夠根據本地使用場景自定義Ajax模塊建立接口,更好的融入本地環境。優雅的設計讓您的程序更加靈活和鬆耦合。

        讓咱們來看一個提供給客戶端調用的Service類示例。

@Service("testAjaxModel1")
public class TestAjaxModel1 implements ISTAjaxModel {
	public STDataResult<Integer> min(Integer x, Integer y) {
		int ret = (x < y)  ?  x :  y;
		return STDataResult.succByMessage("success min", ret);
	}
	
	public STDataResult<List<Integer>> getRandomList(Integer minNum, Integer maxNum, Integer count) {
		int num;
		List<Integer> list = new ArrayList<Integer>();
		for (int i=0; i<count; i++) {
			num = minNum + Double.valueOf(Float.valueOf(maxNum - minNum) * Math.random()).intValue();
			list.add(num);
		}
		return STDataResult.succByMessage("success random list", list);
	}
}


        這是一個使用Spring註解建立的Service,這個類在沒有任何配置的狀況下就能夠在客戶端直接調用,客戶端引用方法也很簡單。

<ajax:script value="testAjaxModel1"></ajax:script>
        這樣客戶端就可以直接使用了。固然也支持同時加載多個模塊。


<ajax:script value="testAjaxModel1,testAjaxModel2"></ajax:script>

      若是您須要自定義JavaBean對象的獲取方式,須要實現接口ISTServiceLoader,而且加入配置項jsajax.class.serviceLoader。

    六、生成JS文件體積極小而且支持客戶端緩存,能夠自定義JavaScript生成規則


        JimStoneAjax 生成的JS文件體積很是小巧,而且生成的JS文件可以自動被瀏覽器緩存住。若是您開發環境使用JRebel或者服務器支持熱部署,那麼沒有關係,它會根據class文件編譯修改時間自動更新緩存。

        默認提供生成的JS若是不能知足您的需求,您徹底能夠定義本身的JS生成器。須要實現ISTAjaxJavascriptMaker接口,而且加入配置項 jsajax.class.jsMaker。

    七、支持方便的JSTL標籤使用更簡便

    它的JSTL標籤只有三種:


  • ajax:script    加載JS腳本
  • ajax:url    生成方法直接調用URL
  • ajax:load    直接在頁面當前位置加載方法調用的結果數據


    綜上所述,JimStoneAjax 比 DWR 更加輕量、方便和靈活。

    更多信息能夠下載示例或去JimStoneAjax官網查看。

相關文章
相關標籤/搜索