ExtJS Direct 的Java实现——DJN

2009年7月7日, ExtJS 3.0 崭新出炉。其中一个重要功能为 Direct ,提供了客户端平滑访问服务器端方法的机制,类似于RPC。
Direct是后端无关的,允许你选择自己喜欢的后端环境,例如Java、.NET、PHP、Ruby、Perl等。
目前在Java环境的后端实现中, DirectJNgine 最为完整。
工作原理及使用方法:
DJN在应用中注册一个Sevlet,所有客户端与服务器端的通信均通过该Sevlet完成。在web.xml中,注意该Sevlet的配置:
<!-- DirectJNgine servlet -->
  <servlet>
    <servlet-name>DjnServlet</servlet-name>
    <servlet-class>com.softwarementors.extjs.djn.servlet.DirectJNgineServlet</servlet-class>
   
    <init-param>
      <param-name>debug</param-name>
      <param-value>true</param-value>
    </init-param>  

    <init-param>
      <param-name>providersUrl</param-name>
      <param-value>djn/directprovider</param-value>
    </init-param>

    <init-param>
      <param-name>apis</param-name>
      <param-value>
        test,
        demo
      </param-value>
    </init-param>
   
    <init-param>
      <param-name>demo.apiFile</param-name>
      <param-value>demo/Api.js</param-value>
    </init-param>

    <init-param>
      <param-name>demo.namespace</param-name>
      <param-value>Ext.app</param-value>
    </init-param>

    <init-param>
      <param-name>demo.classes</param-name>
      <param-value>
      com.softwarementors.extjs.djn.demo.Poll,
      com.softwarementors.extjs.djn.demo.TestAction,
      com.softwarementors.extjs.djn.demo.Profile,
      com.softwarementors.extjs.djn.demo.FormPostDemo,
      com.softwarementors.extjs.djn.demo.DirectStoreDemo
      </param-value>
    </init-param>

    <init-param>
      <param-name>test.apiFile</param-name>
      <param-value>test/DjnTestApi.js</param-value>
    </init-param>

    <init-param>
      <param-name>test.namespace</param-name>
      <param-value>DjnTestApi</param-value>
    </init-param>

    <init-param>
      <param-name>test.classes</param-name>
      <param-value>
      com.softwarementors.extjs.djn.test.ServerMethodParametersReceptionTest,
      com.softwarementors.extjs.djn.test.ServerMethodReturnTest,
      com.softwarementors.extjs.djn.test.DirectStoreTest,
      com.softwarementors.extjs.djn.test.FormSupportTest,
      com.softwarementors.extjs.djn.test.FormUploadSupportTest,
      com.softwarementors.extjs.djn.test.ManualFormUploadSupportTest,
      com.softwarementors.extjs.djn.test.PollTest
      </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet> 
 
  <servlet-mapping>
    <servlet-name>DjnServlet</servlet-name>
    <url-pattern>/djn/directprovider/*</url-pattern>
  </servlet-mapping>

其中,apis参数定义了一组提供给客户端的api,每个api都有自己的名字空间、服务器端实现和客户端接口。分成多个api的目的是使不同模块间代码尽量解耦,在客户端,只提供本模块的api,而不是把所有可用的api都暴露给每个页面。
我们首先可以在服务器端创建一个类,例如com.test.MyAction。这个类提供一组RPC方法。
为使用DJN提供的Annotation,应引入包import com.softwarementors.extjs.djn.config.annotations.*;
代码如下:
import com.softwarementors.extjs.djn.config.annotations.*;

@DirectAction(action="MyTestAction")
public class TestAction {
	@DirectMethod
	public void test()
	{
    		System.out.println("--- Here I am");
	}
}

如客户端和服务器端的api类名相同,则@DirectAction(action="MyTestAction")一句可省略。
每个方法都应用@DirectMethod进行定义,以便让DJN自动完成api的注册。
写好类之后,应在web.xml中找到apis参数,加入新的api:
test,demo, xx
然后配置xx.classes参数,将完整类名加入。在找到xx.apiFile参数,写一个js脚本的文件名xxApi.js。
这样,在初始化Sevlet时,DJN将根据xx.classes加载所有Action类,并自动生成客户端api接口文件(一个js脚本),存放在xx.apiFile参数所指定的位置。
在客户端,只要将xx.apiFile指定的api脚 本包含进来,就可以直接调用其所声明的方法了。
例如:
<script type="text/javascript" src="xxApi.js"></script>
<script type="text/javascript">
……
 buttons: [{
        text: "Test",
        handler: function(){
          MyTestAction.test();
        }
      }]
……
</script>

ExtJS已经在很多组件中内置支持Direct,甚至连代码都不必写,直接配置一下即可完成数据通信。如此一来,利用ExtJS,配合Direct开发Ajax应用,就变得无比轻松!

转自:http://blog.sina.com.cn/s/blog_4c8406d00100e81n.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值