基于EasyJWeb的Ajax远程脚本调用引擎

本文介绍了使用EasyJWeb进行远程脚本调用的方法,包括如何解决参数类型为接口的问题,以及具体的配置步骤。通过实际案例展示了如何在ExtJS客户端调用服务器端的Java方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 远程脚本调用的好处
        远程脚本调用也即是把JAVA类注入到客户端的JavaScript代码中,从而直接在客户端的JS代码中就可以远程调用服务器端暴露出来的JAVA类与类中的方法。这样的好处之一就是实现Ajax的异步调用,从而实现View层直接远程访问业务逻辑层,省去与Action控制器打交道。

二、 EasyJWeb集成远程脚本调用引擎
        在J2EE开发领域中的远程脚本调用,最让大家熟悉的么过于EasyJWeb中的远程脚本调用引擎与DWR。二者都可实现直接在客户端的JS中远程调用JAVA类,但我更推荐使用EasyJWeb, 因为远程脚本调用引擎只是他的一个小功能,你还可以在需要的时候使用他的其它功能,不用在学习其它的(如Struts、JSF等)MVC框架。比如EXT接收数据只能是基于JSON格式,这在Struts中是需要我们自己去处理把数据转换成JSON格式再返回给EXT,而在JWEB中则直接String json = AjaxUtil.getJSON(obj); 再把这个JSON字符串返回给客户端的Ext.data.JsonStore类即可。
        以下介绍二种View层为不同模版时远程脚本调用实例,及在使用它时的一些细节处理。

三、 View层为普通HTML模版实例
        可以参照大峡的 《性能提升10倍的Ajax远程脚本调用引擎》http://www.easyjf.com/blog/html/20080103/1015816.html
        Demo下载地址:ftp://ftp1.easyjf.com/easyjweb/demo/ajax.war

四、 View层为ExtJS的实例
        其实在网上也能找到这类文章http://www.vifir.com/entry/view/917505.html
  Demo下载地址:http://www.vifir.com/portal.ejf?cmd=downloadVipFile&name=codes/dwrstore.zip

        但由于《DWRStore及示例》这个实例中的业务逻辑类暴露给客户端的方法所带参数为一个QueryObject,

public  IPageList getPersons(QueryObject query)  {
        IPageList pageList
=new PageList(new com.easyjf.web.tools.ListQuery(persons));
        pageList.doList(query.getPageSize(),query.getCurrentPage(),
"""");
        
return pageList;
}

        也就是说参数是一个查询实体类,而如果我们的项目是采用的EasyJWeb的命令自动根据域模型所生成,那么在生成的基本Crud时,业务逻辑类中的查询参数默认就是一个查询接口IQueryObject,而并非查询实体类QueryObject。如:

public  IPageList getPersons (IQueryObject queryObject)  {
        
return QueryUtil.query(queryObject, Person.classthis.personDao);
    }


        所以如果再像《DWRStore及示例》中介绍的方式在客户端的EXT中调用fn:personService.getPersons,, 则会在EXT中执行时报如下的错误:


        原因就在于远程调用的的这个方法中所带的查询参数是一个接口而非一个实体查询对象,解决办法则是在项目的easyjf-web.xml配置文件中把<ajax></ajax>作如下配置修改:

< ajax >
        
< services  allowName ="*" >             
            
< service  name ="blogSortService"   />
        
</ services >
    
< signatures >
        
<![CDATA[ blogSortService.getBlogSortBy(com.easyjf.core.support.query.QueryObject); ]]>
    
</ signatures >
</ ajax >

        当类中的方法参数为接口时如果没有做配置这是造成远程脚本调用失败的原因之一,现在请看下面这段配置代码。
< beans >
  
< bean  name ="blogSortService"  class ="com.easyjf.lyBlog.service.impl.BlogSortServiceImpl"   />
</ beans >
< ajax >
        
< services  allowName ="*" >             
            
< service  name ="blogSortService"   />
        
</ services >
     
< signatures >
        
<![CDATA[ blogSortService.getBlogSortBy(com.easyjf.core.support.query.QueryObject); ]]>
     
</ signatures >
</ ajax >


        这样配置能远程调用成功吗?结果是NO。注意看,<service name="blogSortService" />这里依赖于上面我们自己单独创建的Bean,这个Bean并没有错,但我们并没有为这个Bean配置一个DAO呀。所以照样无法远程调用成功。会得到一个类似于这样的错:



        可能还会有疑问,为什么最开始我们只配置了一个<ajax></ajax>并没有配置一个Bean,反而能远程调用成功,现在配置了一个Bean,只是没有配置这个Bean所管理的DAO却不能调用成功,原因就在于虽然我们在easyjf-web.xml配置文件中找不到对<service name="blogSortService" />name名称为blogSortService的Bean,但由于使用JWEB的命令生成一个EJS的项目时,默认它就自动为我们把这些管理业务逻辑,并与持久层关联的XML配置文件都自动生成好了,不然你到你所生成的项目的src/main/resources目录下查找看一下.
        其它客户端EXT代码与《DWRStore及示例》完全一致,同时这里我也提供一个基于EJS(EasyJWeb+Spring+JPA)的Crud的远程脚本调用示例,

可以先增加一些数据 http://localhost:82/message.ejf


演示远程脚本调用   http://localhost:82/index.html


Demo下载地址:     (所需要的包可以拷贝easyjweb1.1 lib目录下的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值