<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Flex通信-Java服務端通信實例

    Posted on 2011-10-09 17:23 瘋狂 閱讀(2434) 評論(0)  編輯  收藏 所屬分類: flex

    轉自:http://blessht.iteye.com/blog/1132934
    Flex與Java通信的方式有很多種,比較常用的有以下方式:

    WebService:一種跨語言的在線服務,只要用特定語言寫好并部署到服務器,其它語言就可以調用

    HttpService:通過http請求的形式訪問服務器

    RmoteObject:通過AMF協議,以二進制的形式交互數據

    Socket:套接字協議,服務器和客戶端以IO的形式交互數據

    上面幾種各有個的優勢:WebService常用于跨語言調用,不過解析協議需要花不少時間,運行速度不快;HttpService類似于Ajax;通常RmoteObject是最受歡迎的,因為它的運行效率快,數據解析方便。Socket編碼稍微麻煩點,這里有一個Socket通信的例子,大家可以學習一下:http://blog.csdn.net/as_leon/article/details/5351713

     

    今天針對WebService、HttpService和RmoteObject三種通信分別做一個例子,供大家學習參考。

     

    在Flex頁面上新建三個文本框和按鈕,在文本框中輸入內容再點擊不同按鈕調用不同通信方式,最后將Java返回的數據顯示在界面上。首先看下運行效果:

     

    • WebService通信

    【Java端代碼】

    JDK提供了比較全面的webservice支持,為了簡化開發步驟,我使用了Apache CXF框架實現WebService的開發部署。CXF的使用可以參照這里:http://blessht.iteye.com/blog/1105562

     

    首先創建一個接口:

     

    Java代碼 復制代碼 收藏代碼
    1. package webservice;   
    2.   
    3. import javax.jws.WebService;   
    4.   
    5. @WebService  
    6. public interface HelloWebservice {   
    7.     public String getWebservice(String name);   
    8. }  

     然后創建該接口的實現類:

     

    Java代碼 復制代碼 收藏代碼
    1. package webservice;   
    2.   
    3. import javax.jws.WebService;   
    4.   
    5. @WebService(endpointInterface="webservice.HelloWebservice",serviceName="hellows",portName="hellowsport")   
    6. public class HelloWebserviceImpl implements HelloWebservice{   
    7.     public String getWebservice(String name) {   
    8.         return "你好["+name+"]這是來自webservice的信息..."+this;   
    9.     }   
    10. }  

     最后創建服務器端啟動代碼,只要運行main方法即可。當前WebService沒有部署在tomcat之類的服務器下,而是通過jetty部署的:

     

    Java代碼 復制代碼 收藏代碼
    1. package webservice;   
    2.   
    3. import javax.xml.ws.Endpoint;   
    4.   
    5. public class WebserviceServer {   
    6.     protected WebserviceServer() throws Exception {     
    7.         // START SNIPPET: publish   
    8.         System.out.println("Server Starting...");     
    9.         HelloWebservice hello = new HelloWebserviceImpl();    
    10.         String address = "http://localhost:8888/hellows";   
    11.         Endpoint.publish(address, hello);   
    12.         // END SNIPPET: publish   
    13.     }   
    14.        
    15.     public static void main(String[] args) throws Exception {   
    16.         //啟動web服務   
    17.         new WebserviceServer();   
    18.         System.out.println("Server ready...");   
    19.         Thread.sleep(5 * 60 * 1000);     
    20.         System.out.println("Server exiting...");   
    21.         System.exit(0);   
    22.     }   
    23. }  

    為了驗證WebService是否啟動成功,可以在瀏覽器下放入如下地址:http://localhost:8888/hellows?wsdl,如果部署成功,則瀏覽器會顯示wsdl的xml配置信息。

     

    【Flex端代碼】

     

     

    Xml代碼  
    1. <fx:Script>  
    2.         <![CDATA[  
    3.                //WebService調用  
    4.             protected function button3_clickHandler(event:MouseEvent):void  
    5.             {  
    6.                 var ws:WebService = new WebService();  
    7.                 ws.wsdl = "http://localhost:8888/hellows?wsdl";  
    8.                 ws.loadWSDL();  
    9.                 ws.getWebservice(webservice_txt.text);  
    10.                 ws.addEventListener(ResultEvent.RESULT,function callback(e:ResultEvent):void{  
    11.                     webservice_result.text = e.result.toString()  
    12.                 });  
    13.             }  
    14.                 
    15.               ]]>  
    16. </fx:Script>  
    17.   
    18. <s:Label x="61" y="215" text="WebService:"/>  
    19.     <s:TextInput x="152" y="205" id="webservice_txt"/>  
    20.     <s:Button x="289" y="206" label="發送" click="button3_clickHandler(event)"/>  
    21.     <s:Label x="383" y="215" id="webservice_result"/>  

    注意,WebService,HttpService和RemoteObject發送請求都是異步的,開發人員需要編寫回調函數來獲取返回數據。 

    最后運行flex,在文本框中輸入內容,點擊發送按鈕就能看到java服務端返回的數據。

     

     

     

    • HttpService通信

    【java代碼】

    首先創建一個servlet,這里獲取key值為"name"的數據(所以Flex端需要發送一個key為"name"的參數),最后通過PrintWriter.write的形式將結果返回給客戶端。這是一個典型的Ajax請求響應例子。

     

    Java代碼  
    1. public class HelloHttp extends HttpServlet {   
    2.     private static final long serialVersionUID = 1L;   
    3.        
    4.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   
    5.         this.doPost(request, response);   
    6.     }   
    7.   
    8.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   
    9.         String name = request.getParameter("name");   
    10.         response.setCharacterEncoding("UTF-8");   
    11.         PrintWriter pw = response.getWriter();   
    12.         pw.write("你好["+name+"]這是來自Httpservice的消息...當前Session是:"+request.getSession());   
    13.         pw.close();   
    14.     }   
    15. }  
     編寫完成后,將java項目部署到服務器中(我使用的是tomcat)。

     

    【Flex代碼】

    Flex端需要創建一個HttpService對象來訪問剛才的Servlet:

     

    Xml代碼  
    1. <SPAN style="WHITE-SPACE: pre"> </SPAN><fx:Script>  
    2.         <![CDATA[  
    3.             //HttpService的形式訪問Java服務器  
    4.             protected function button2_clickHandler(event:MouseEvent):void  
    5.             {  
    6.                 var http:HTTPService = new HTTPService();  
    7.                 http.url = "http://localhost:8080/JavaToFlex/HelloHttp?name="+http_txt.text;  
    8.                 http.send();  
    9.                 http.addEventListener(ResultEvent.RESULT,function callback(e:ResultEvent):void{  
    10.                     http_result.text = e.result.toString();  
    11.                 });  
    12.             }  
    13.               
    14.             ]]>  
    15.     </fx:Script>  
    16.   
    17. <SPAN style="WHITE-SPACE: pre"> </SPAN><s:Label x="61" y="138" text="HttpService:"/>  
    18.     <s:TextInput x="152" y="128" id="http_txt"/>  
    19.     <s:Button x="289" y="129" label="發送" click="button2_clickHandler(event)"/>  
    20.     <s:Label x="383" y="138" id="http_result"/>  
     

     

     

    • RemoteObject通信

    為了實現Flex調用Java代碼,需要引入一個新的插件Blaseds。

    把Blaseds項目WEB-INf下的flex文件夾拷貝到Java項目WEB-INF目錄下,再將Blaseds項目下lib目錄的jar文件引入到java項目中(注意jar文件沖突)。

    隨后編寫一個Java類:

     

    Java代碼  
    1. package blaseds;   
    2.   
    3. import flex.messaging.FlexContext;   
    4.   
    5. public class RemoteClass {   
    6.     public String helloRemote(String name){   
    7.         return "你好["+name+"]這是來自JavaRemote的消息...當前Session是:"+FlexContext.getHttpRequest().getSession();   
    8.     }   
    9. }  

     隨后在web.xml中添加如下內容(這些配置在Blaseds文件的web.xml中都能找到):

     

    Xml代碼 復制代碼 收藏代碼
    1. <!-- Http Flex Session attribute and binding listener support -->  
    2.     <listener>  
    3.         <listener-class>flex.messaging.HttpFlexSession</listener-class>  
    4.     </listener>  
    5.   
    6.     <!-- MessageBroker Servlet -->  
    7.     <servlet>  
    8.         <display-name>MessageBrokerServlet</display-name>  
    9.         <servlet-name>MessageBrokerServlet</servlet-name>  
    10.         <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>  
    11.         <init-param>  
    12.             <param-name>services.configuration.file</param-name>  
    13.             <param-value>/WEB-INF/flex/services-config.xml</param-value>  
    14.        </init-param>  
    15.         <load-on-startup>1</load-on-startup>  
    16.     </servlet>  
    17.        
    18.     <servlet>  
    19.         <display-name>RDSDispatchServlet</display-name>  
    20.         <servlet-name>RDSDispatchServlet</servlet-name>  
    21.         <servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>  
    22.         <init-param>  
    23.             <param-name>useAppserverSecurity</param-name>  
    24.             <param-value>false</param-value>  
    25.         </init-param>           
    26.         <load-on-startup>10</load-on-startup>  
    27.     </servlet>  
    28.   
    29.     <servlet-mapping id="RDS_DISPATCH_MAPPING">  
    30.         <servlet-name>RDSDispatchServlet</servlet-name>  
    31.         <url-pattern>/CFIDE/main/ide.cfm</url-pattern>  
    32.     </servlet-mapping>  
    33.        
    34.     <servlet-mapping>  
    35.         <servlet-name>MessageBrokerServlet</servlet-name>  
    36.         <url-pattern>/messagebroker/*</url-pattern>  
    37.     </servlet-mapping>  

     

    最后打開Java項目,打開/WEB-INF/flex/remoting-config.xml文件,在文件中添加RemoteClass的遠程支持:

     

    Xml代碼  
    1. <service id="remoting-service" class="flex.messaging.services.RemotingService">  
    2.   
    3.     <adapters>  
    4.         <adapter-definition id="java-object"  
    5.             class="flex.messaging.services.remoting.adapters.JavaAdapter"  
    6.             default="true" />  
    7.     </adapters>  
    8.   
    9.     <default-channels>  
    10.         <channel ref="my-amf" />  
    11.     </default-channels>  
    12.        
    13.     <!-- 定義遠程調用的目標名 -->  
    14.     <destination id="remoteClass">  
    15.         <properties>  
    16.             <source>blaseds.RemoteClass</source>  
    17.         </properties>  
    18.     </destination>  
    19. </service>  

     隨后將Java項目部署到服務器中。

     

    【Flex端代碼】

    Flex端為了調用Java代碼,需要創建一個RemoteObject實例,屬性destination就是在Java端remoting-config.xml文件中定義的<destination id="remoteClass">,這樣你可以把RemoteObject當作一個RemoteClass的實例使用。

     

    Xml代碼  
    1. <fx:Script>  
    2.         <![CDATA[  
    3.  
    4.             //RemoteObject遠程調用Java方法  
    5.             protected function button1_clickHandler(event:MouseEvent):void  
    6.             {  
    7.                 var remote:RemoteObject = new RemoteObject();  
    8.                 remote.destination = "remoteClass";  
    9.                 remote.helloRemote(remote_txt.text);  
    10.                 remote.addEventListener(ResultEvent.RESULT,function callback(e:ResultEvent):void{  
    11.                     remote_result.text = e.result.toString();  
    12.                 });  
    13.             }  
    14.               
    15.         ]]>  
    16.     </fx:Script>  
    17.   
    18. <s:Label x="61" y="67" text="RemoteObject:"/>  
    19.     <s:TextInput x="152" y="57" id="remote_txt"/>  
    20.     <s:Button x="289" y="58" label="發送" click="button1_clickHandler(event)"/>  
    21.     <s:Label x="383" y="67" id="remote_result"/>  
    主站蜘蛛池模板: 成年男女男精品免费视频网站| 亚洲AV无码一区二区三区电影 | 日本视频在线观看永久免费| 一区二区三区免费在线视频| 深夜特黄a级毛片免费播放| 亚洲av无码专区在线电影天堂| 亚洲一区二区三区丝袜| 亚洲AV第一成肉网| 无码天堂亚洲国产AV| 阿v免费在线观看| 九九免费精品视频在这里| xxxx日本在线播放免费不卡| 一级一黄在线观看视频免费| 国产成人无码免费网站| 免费无码av片在线观看| 久久青草精品38国产免费| 7x7x7x免费在线观看| 国产精品视频免费一区二区| 成人毛片免费观看视频大全| 日本免费中文字幕在线看| 免费一级毛片在线播放| 亚洲一区二区三区香蕉| 亚洲国产女人aaa毛片在线| 亚洲精品中文字幕麻豆| 亚洲砖码砖专无区2023| 特级毛片A级毛片100免费播放 | 亚洲精品视频在线观看视频| 97se亚洲国产综合自在线| 亚洲丁香婷婷综合久久| 一级毛片正片免费视频手机看| 中文字幕成人免费高清在线| 99久久人妻精品免费一区| 无码一区二区三区AV免费| 又黄又爽的视频免费看| 国精无码欧精品亚洲一区| 亚洲美女中文字幕| 亚洲欧美aⅴ在线资源| 国产精品免费久久久久影院| 99爱在线观看免费完整版| 女人毛片a级大学毛片免费| 亚洲色偷偷综合亚洲AV伊人|