EasyJWeb中已經有了一個Ajax遠程指令碼調用引擎,這是很早的事情了。但由於一直存在一些效能問題,所以一直沒有給大家推薦,直到最近m3發布,通過對Ajax遠程指令碼調用引擎進行完善,把處理複雜物件的返回進行的簡化,通過在以前的幾個應用中進行了測試,發現效能一下子提升了至少10倍以上,並且運行比較穩定,因此在這裡給大家推薦推薦。
線上樣本:http://easyjweb.demo.easyjf.com/ajax/ajax.html
完整的樣本應用及源碼下載:ftp://ftp1.easyjf.com/easyjweb/demo/ajax.war
EasyJWeb是一個提供了對Ajax遠程指令碼調用功能支援的架構,他協助你完成Ajax遠程指令碼調用中的大多數細節工作,你基本上不用寫額外的代碼就能非常輕鬆的使用javascript來調用伺服器的業務組件的相關方法,這些業務組件可以是任何java對象,比如EJB、EasyJWeb視窗中的Bean、Spring容器中的Bean等等。使用EasyJWeb的Ajax遠程指令碼調用,需要下面的幾個步驟:
1、 在EasyJWeb容器或子容器中配置供用戶端指令碼調用的業務組件。比如,在easyjweb的設定檔中像下面的方式配置Bean:
<bean name="PersonService" class="easyjweb.demo.service.impl.PersonServiceImpl" />
PersonServiceImpl.java代碼如下:
package easyjweb.demo.service.impl;
import java.util.Date;
import java.util.List;
import java.util.Map;
public class PersonServiceImpl ...{
/** *//**
* 得到伺服器目前時間
* @return
*/
public Date getTime() ...{
return new Date();
} }
2、 在EasyJWeb的設定檔,配置要把容器中的哪些業務組件及具體方法暴露給用戶端進行遠程指令碼調用。內容大致如下:
<ajax>
<services allowName="*">
<service name="PersonService" />
</services>
</ajax>
上面的ajax配置資訊表示暴PersonService的所有public方法供用戶端使用javascript調用。
只需要上面的兩步,就完成了伺服器端的相關工作。伺服器端不再需要寫任何Action,EasyJWeb會自動處理用戶端發送來的Ajax遠程指令碼調用,下面我們進一步看看用戶端的程式。
3、為了能夠在用戶端頁面中直接使用javascript進行對PersonService業務組件的Ajax遠程指令碼調用,我們需要在頁面中引入下面三個js。
<script src="ejf/easyajax/prototype.js" type="text/javascript"></script>
<script src="ejf/easyajax/engine.js" type="text/javascript"></script>
<script src="ejf/easyajax/PersonService.js" type="text/javascript"></script>
其中第一個ejf/easyajax/prototype.js引入的是prototype.js,這是一個javascript的基礎庫,提供很多對基礎javascript類的擴充,並提供了ajax相關的實用組件,EasyJWeb的遠程指令碼調用引擎是基於prototype.js構建的。
第二個ejf/easyajax/engine.js是EasyJWeb的遠程指令碼調用支援引擎,他負責處理Ajax遠程指令碼調用的相關的細節,如參數處理、回調處理等,同時提供了一些工具 + 生產力如EasyAjaxUtil等供用戶端使用。
第三個ejf/easyajax/PersonService.js是PersonService對象,PersonService.js的內容是根據伺服器端的容器中名為PersonService的Bean及EasyJWeb的ajax配置資訊產生的。只要引入了PersonService.js,我們就可以直接在頁面中調用PersonService的相關方法了。
上面的三個js檔案都是伺服器端動態產生的,需要我們在web.xml檔案把所有/ejf/*的URL都交由EasyJWeb來處理。因此,需要在Web.xml的url中增加如下的映射內容:
<servlet-mapping>
<servlet-name>easyjf</servlet-name>
<url-pattern>/ejf/*</url-pattern><!--所有/ejf/開頭的url都由easyjweb來處理-->
</servlet-mapping>
4、 在頁面中使用javascript調用伺服器的相關方法
<script>...
function showServerTime()...{
PersonService.getTime(showTime) ;
function showTime(ret)...{
alert("伺服器端時間: "+ret) ;
}
}
</script>
怎麼樣,一切都是如此簡單,不需要寫任何PersonService的代碼,不需要寫任何Action,只需要進行非常簡單的配置,就能讓我們伺服器上的業務組件支援Ajax遠程指令碼調用。