ExtJS Direct 的Java实现——DJN

来源:互联网 发布:求数组最大值和最小值 编辑:程序博客网 时间:2024/05/01 11:19
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 {@DirectMethodpublic 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
原创粉丝点击