JsonGateway

JsonGateway是一個java遠程服務調用的ajax的接口,它使用Json數據格式在頁面上的javascript和後臺的 java服務之間進行數據交換。目前它可以調用spring的service,當然也可以調用普通的java類方法。jsonGateway可以自動生成 所配置的java類的javascript包裝類,這將使你能夠輕鬆進行ajax遠程調用。jsonGateway使用了JQuery來進行遠程調用,同 時在服務端使用了jsontools進行json數據格式的轉換。

你可以在Sorceforge上下載 http://sourceforge.net/project/showfiles.php?group_id=188794

使用方法:

如果後臺我們使用了Spring,那麼調用Spring中配置的Service Bean的方法的方式爲

: 
配置JsonGateway的Servlet: 在web.xml中, 增加 
<servlet> 
<description>json gateway</description> 
<display-name>json gateway servlet</display-name> 
<servlet-name>json-gateway</servlet-name> 
<servlet-class>org.svilo.spring.json.JsonGatewayServlet</servlet-class> 
</servlet>

<servlet-mapping> 
<servlet-name>json-gateway</servlet-name> 
<url-pattern>/json/*</url-pattern> 
</servlet-mapping>

在html、jsp頁面中,引入如下的javascript: 
<script type="text/javascript" src="/js/jquery.js"></script> 
<script type="text/javascript" src="/js/json.js"></script> 
<script type="text/javascript" src="/js/moo.js"></script> 
<script type="text/javascript" src="/js/jsonGateway.js"></script>

同時也需要引入自動生成的服務代理Javascript:

如果你有一個Spring的服務bean叫做'CustomerMgrService',那麼在你的html中,增加如下幾行代碼:

<script type="text/javascript"src="/json/CustomerMgrService.js"></script> //the CustomerMgrService.js is generated by the JsonGateway

具體在javascript中的使用方法如下:

function testService(){ 

var callerResponder = new CallerResponder(); //這是ajax的響應回調的封裝類 
callerResponder.success = function(jsonObj) { //當調用後臺方法成功時的回調函數 
var customer = jsonObj; 
alert(customer.brandName); 

alert(this.context.name); //this will display 'wuyu' //我們在調用某個後臺服務方法前,設置到CallerResponder上下文中的一些變量,在成功回調函數中,可以通過上下文取出來使用 
alert(this.context.age); //this will display '30' 
var str = jQuery.toJSON(customer); 
var msg = "ajax success: " + str; 
alert(msg); 


callerResponder.error = function(request,settings,e) { //failure callback function, you may not implement it

//調用後臺方法出錯的回調函數 
if (request.status == 500) { 
var jsonError = jQuery.parseJSON(request.responseText); 

if (this.debug ) { 
alert("ajax error: " + request.responseText); 
alert(e); 



callerResponder.context.name = "wuyu"; //set the data which you will access in callback function 向callerResponder的上下文中設置一些需要在回調函數中訪問的數據 

callerResponder.context.age = "30"; 


var customerMgrService = new CustomerMgrService(); //新創建一個遠程服務包裝的javascript對象 
var tagMgrService = new TagMgrService(); 
var strCustomerId = jQuery("#customerId").val(); 
//調用後臺服務方法 
customerMgrService.findByCustomerId(strCustomerId,callerResponder); // 後臺的spring配置中名字叫 CustomerMgrService的Bean有一個'public Customer findByCustomerId(String customerId)'方法,所以我們在這裏可以調用它,它在後臺方法中只有customerId這個參數,在這裏,我們在調用時方法參數的最後面增加 了一個callerResponder的參數。


}

 

下載包中的代碼缺省只能是調用Spring中配置的服務bean的方法,但是在沒有使用spring的程序中,我們也要使用的話,可以修改JsonGatewayServlet.java

public class JsonGatewayServlet extends HttpServlet {

private static Properties services;

public void init() throws ServletException { 
super.init(); 
services = new Properties(); 
InputStream in =JsonGatewayServlet.class.getClassLoader().getResourceAsStream("services.properties"); 
try{ 
services.load(in); 
}catch( Exception e){ 
e.printStackTrace(); 


增加一個名字叫做services.properties的服務配置文件,該文件中寫上服務名稱和對應java類的映射關係,比如: 
BranchByArea=com.keygate.adbidplatform.common.service.BranchByArea

 

最後再修改一下JsonGatewayServlet的getService方法,直接從我們的配置文件中讀取服務的配置即可。

private Object getService(HttpServletRequest request,String serviceName) throws Exception { 
// WebApplicationContext webappCtx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext()); 
// Object service = webappCtx.getBean(serviceName); 
Object service = Class.forName((String)services.get(serviceName)).newInstance(); 
if (service == null) 

Exception e = new Exception("can not find the service: " + serviceName); 
throw e; 

return service; 
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章