论坛首页 编程语言技术论坛

Flex blazeDs 的误解[其实很简单]

浏览 2480 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-06  

最近考虑项目是不是要引进Flex技术,所以花一周研究Flex的几大方面,先给出自己的一点体会[很浅],希望交流!

 

今天的富客户端,无论ajax,flex,javafx,sliverlight!

 

 都不可回避的问题是什么???

 

   客户端[可以看做新时代的web层]与服务器[看做新时代的服务组件]怎么交互.

   最好是客户端,服务器端有容器帮我们解决,让我们写ajax,flex想struts2 freemarker一样简单!

 

   所以:

         Flex在客户端有Cairngorm

               在服务器端有blazeDs

   不过如果真的用还是建议自己简化封装blazeDs就是java的代码,以servlet作为入口,如果用过axis,cxf,呵呵是不是就  是 soap和AMF区别,那就是编码,解码器不同[引用通信术语],思考!

 

 必须考虑的问题是什么?

 

  通信的效率,通信的次数,编码解码的效率,UI渲染的效率[Ext渲染,与服务器交换次数,数量,javaeye的人应该生有体会,]

 

 我们来简单看一个,flex+tomcat [blazeDa弱化,只是java的一个框架类似struts,axis]的例子,生有不要强化blazeDs需要弱化,因为知道AMF协议自己可以做个blazeDs 呵呵AMFPHP就是哈!

 

简单看哈Flex端代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundGradientColors="[0x000000,0x323232]">
   
   <mx:ChannelSet id="channelSet">
        <mx:AMFChannel id="amfChannel" url="http://localhost:8080/blazeDsTomcat/blazeDs/bobo"/>
    </mx:ChannelSet>
   
   <mx:RemoteObject id="srv" destination="language" channelSet="{channelSet}"/>
   
    <mx:DataGrid dataProvider="{srv.getLanguages.lastResult}" width="100%" height="100%">
        <mx:columns>
            <mx:DataGridColumn dataField="id" headerText="id"/>
            <mx:DataGridColumn dataField="name" headerText="Name"/>
            <mx:DataGridColumn dataField="desc" headerText="Desc"/>
            </mx:columns>
    </mx:DataGrid>

    <mx:Button label="Get Data" click="srv.getLanguages()"/>   
       
</mx:Application>

 

http://localhost:8080/blazeDsTomcat/blazeDs/bobo这个很重要哈,看看服务器web.xml中怎么配置的哈?

 

<servlet>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
        <init-param>
            <param-name>services.configuration.file</param-name>
            <param-value>/WEB-INF/flex/services-config.xml</param-value>
       </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <url-pattern>/blazeDs/*</url-pattern>
    </servlet-mapping>

 

哈哈Flex端请求到了flex.messaging.MessageBrokerServlet这个不就是Servlet与axis,struts有何区别

唯一不同是http承载的数据格式不同,需要不同的解码与编码器,一般内置了哈,开发是透明的!所以sping就是想达到开发flex与传统开发java没有多大区别,是开发值关心Flex ui 与event 与pojo

 

那么?MessageBrokerServlet类怎么处理请求,猜想肯定找对应的类解码AMF数据然后调用处理者[我们的业务组件]

源码:

String contextPath = req.getContextPath();
            String pathInfo = req.getPathInfo();
            String endpointPath = req.getServletPath();
            if (pathInfo != null)
                endpointPath = endpointPath + pathInfo;

            Endpoint endpoint = null;
            try
            {
                endpoint = broker.getEndpoint(endpointPath, contextPath);
            }

呵呵根据请求找到对应的endpoint ,然后解码----调用业务组件---编码  返回Flex端

 

看看服务器端代码与配置[消除了网上很多例子的融于代码]

 

上面web.xml可以看到初始化了services-config.xml文件类似spring,一切都差不多,我们看看services-config.xml文件是什么? 如下

<?xml version="1.0" encoding="UTF-8"?>
<services-config>

    <services>
        <service-include file-path="remoting-config.xml" />  
    </services>
    <channels>
        <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint url="http://{server.name}:{server.port}/{context.root}/blazeDs/bobo" class="flex.messaging.endpoints.AMFEndpoint"/>
        </channel-definition>
    </channels>
</services-config>
就这样简单,引入了remoting-config.xml,看看这个文件是什么

<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
    class="flex.messaging.services.RemotingService">

    <adapters>
        <adapter-definition id="java-object"
        class="flex.messaging.services.remoting.adapters.JavaAdapter"
        default="true"/>
    </adapters>
    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>
   
    <destination id="language">
        <properties>
            <source>com.bobo.ComputerLanguageService</source>
        </properties>
    </destination>

</service>

也简单哈,大家仔细体会哈

 

blazeDs 是不是只是个axis,xfire这样差不多的[比axis,xfire还是轻量点哈]的一个接受请求,解码,调用服务[我们的],编码,就是个java的Servlet

 

所以关键是什么

 

 

客户端运行语言as----编码 为X[amf]------HTTP---------服务器接受请求派发[servlet]-----X解码----调用服务----java编码为X---返回客户端---X解码为客户端语言的类型

这个过程.,怎么做

1.都自己做 [会怎么样],想想javade发展 sevlet--jsp--srtuts1  webwork jsf

2.容器做 通信 编码解码

3框架类库

框架类库与容器概念今天不是很明确了

 

估计大家 很少几个能 看完的,不喜欢写博客就是业务说不清

 还是喜欢 直接站在讲台讲课哈,可是 没有这样的好机会

 

代码见附件,2部分  flex java 那过去就可以跑!

localClientFlex.rar是flex的一个MXML需要你机器有Flex环境

localFlexClient_swf.rar包含flash直接可以运行但是要考虑安全设置

 

 

 

 

 

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics