加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex通信-Java服务端通信实例

发布时间:2020-12-15 04:18:11 所属栏目:百科 来源:网络整理
导读:Flex通信-Java服务端通信实例 博客分类: ? Flex ? Flex与Java通信的方式有很多种,比较常用的有以下方式: WebService:一种跨语言的在线服务,只要用特定语言写好并部署到服务器,其它语言就可以调用 HttpService:通过http请求的形式访问服务器 RmoteObje

Flex通信-Java服务端通信实例

    博客分类:?
  • Flex
?

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. @WebService??
  5. public?interface?HelloWebservice?{??
  6. ????public?String?getWebservice(String?name);??
  7. }??

?然后创建该接口的实现类:

?

@WebService(endpointInterface="webservice.HelloWebservice",serviceName="hellows",portName="hellowsport")??
  • class?HelloWebserviceImpl?implements?HelloWebservice{??
  • public?String?getWebservice(String?name)?{??
  • ????????return?"你好["+name+"]这是来自webservice的信息..."+this;??
  • ????}??
  • }??
  • ?最后创建服务器端启动代码,只要运行main方法即可。当前WebService没有部署在tomcat之类的服务器下,而是通过jetty部署的:

    ?

    import?javax.xml.ws.Endpoint;??
  • class?WebserviceServer?{??
  • protected?WebserviceServer()?throws?Exception?{????
  • ????????//?START?SNIPPET:?publish??
  • ????????System.out.println("Server?Starting...");????
  • ????????HelloWebservice?hello?=?new?HelloWebserviceImpl();???
  • ????????String?address?=?"http://localhost:8888/hellows";??
  • ????????Endpoint.publish(address,?hello);??
  • //?END?SNIPPET:?publish??
  • ??????
  • static?void?main(String[]?args)?throws?Exception?{??
  • //启动web服务??
  • new?WebserviceServer();??
  • ????????System.out.println("Server?ready...");??
  • ????????Thread.sleep(5?*?60?*?1000);????
  • ????????System.out.println("Server?exiting...");??
  • ????????System.exit(0);??
  • }??
  • 为了验证WebService是否启动成功,可以在浏览器下放入如下地址:http://localhost:8888/hellows?wsdl,如果部署成功,则浏览器会显示wsdl的xml配置信息。

    ?

    【Flex端代码】

    ?

    Xml代码??

    收藏代码

      <fx:Script>??
    1. ????????<![CDATA[?
    2. ???????????????//WebService调用?
    3. ????????????protected?function?button3_clickHandler(event:MouseEvent):void?
    4. ????????????{?
    5. ????????????????var?ws:WebService?=?new?WebService();?
    6. ????????????????ws.wsdl?=?"http://localhost:8888/hellows?wsdl";?
    7. ????????????????ws.loadWSDL();?
    8. ????????????????ws.getWebservice(webservice_txt.text);?
    9. ????????????????ws.addEventListener(ResultEvent.RESULT,function?callback(e:ResultEvent):void{?
    10. ????????????????????webservice_result.text?=?e.result.toString()?
    11. ????????????????});?
    12. ????????????}?
    13. ???????????????
    14. ??????????????]]>??
    15. </s:Label?x="61"?y="215"?text="WebService:"/>??
    16. ????s:TextInput?x="152"?y="205"?id="webservice_txt"s:Button?x="289"?y="206"?label="发送"?click="button3_clickHandler(event)"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请求响应例子。

    class?HelloHttp?extends?HttpServlet?{??
  • private?final?long?serialVersionUID?=?1L;??
  • protected?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{??
  • this.doPost(request,?response);??
  • void?doPost(HttpServletRequest?request,250); line-height:18px"> ????????String?name?=?request.getParameter("name");??
  • ????????response.setCharacterEncoding("UTF-8");??
  • ????????PrintWriter?pw?=?response.getWriter();??
  • ????????pw.write("你好["+name+"]这是来自Httpservice的消息...当前Session是:"+request.getSession());??
  • ????????pw.close();??
  • }??
  • ?编写完成后,将java项目部署到服务器中(我使用的是tomcat)。

    ?

    【Flex代码】

    Flex端需要创建一个HttpService对象来访问刚才的Servlet:

    span?style="white-space:?pre;">????span>????????????//HttpService的形式访问Java服务器?
  • ????????????protected?function?button2_clickHandler(event:MouseEvent):void?
  • ????????????????var?http:HTTPService?=?new?HTTPService();?
  • ????????????????http.url?=?"http://localhost:8080/JavaToFlex/HelloHttp?name="+http_txt.text;?
  • ????????????????http.send();?
  • ????????????????http.addEventListener(ResultEvent.RESULT,147)">????????????????????http_result.text?=?e.result.toString();?
  • ?????????????
  • ????????????]]>??
  • s:Label?x="61"?y="138"?text="HttpService:"s:TextInput?x="152"?y="128"?id="http_txt"s:Button?x="289"?y="129"?label="发送"?click="button2_clickHandler(event)"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类:

    package?blaseds;??
  • import?flex.messaging.FlexContext;??
  • class?RemoteClass?{??
  • public?String?helloRemote(String?name){??
  • return?"你好["+name+"]这是来自JavaRemote的消息...当前Session是:"+FlexContext.getHttpRequest().getSession();??
  • }??
  • ?随后在web.xml中添加如下内容(这些配置在Blaseds文件的web.xml中都能找到):

    <!--?Http?Flex?Session?attribute?and?binding?listener?support?-->??
  • listener ????????listener-class>flex.messaging.HttpFlexSession ????<!--?MessageBroker?Servlet?-->??
  • servletdisplay-name>MessageBrokerServletservlet-nameservlet-class>flex.messaging.MessageBrokerServletinit-param ????????????param-name>services.configuration.fileparam-value>/WEB-INF/flex/services-config.xml ???????load-on-startup>1>RDSDispatchServlet>flex.rds.server.servlet.FrontEndServlet>useAppserverSecurity>false>??????????
  • >10servlet-mapping?id="RDS_DISPATCH_MAPPING"url-pattern>/CFIDE/main/ide.cfmservlet-mapping>/messagebroker/*>??
  • ?

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

    service?id="remoting-service"?class="flex.messaging.services.RemotingService"adaptersadapter-definition?id="java-object"??
  • ????????????class="flex.messaging.services.remoting.adapters.JavaAdapter"??
  • ????????????default="true"?default-channelschannel?ref="my-amf"?<!--?定义远程调用的目标名?-->??
  • destination?id="remoteClass"propertiessource>blaseds.RemoteClassdestinationservice>??
  • ?随后将Java项目部署到服务器中。

    ?

    【Flex端代码】

    Flex端为了调用Java代码,需要创建一个RemoteObject实例,属性destination就是在Java端remoting-config.xml文件中定义的<destination id="remoteClass">,这样你可以把RemoteObject当作一个RemoteClass的实例使用。

    ?
  • ????????????//RemoteObject远程调用Java方法?
  • ????????????protected?function?button1_clickHandler(event:MouseEvent):void?
  • ????????????????var?remote:RemoteObject?=?new?RemoteObject();?
  • ????????????????remote.destination?=?"remoteClass";?
  • ????????????????remote.helloRemote(remote_txt.text);?
  • ????????????????remote.addEventListener(ResultEvent.RESULT,147)">????????????????????remote_result.text?=?e.result.toString();?
  • ????????]]>??
  • s:Label?x="61"?y="67"?text="RemoteObject:"s:TextInput?x="152"?y="57"?id="remote_txt"s:Button?x="289"?y="58"?label="发送"?click="button1_clickHandler(event)"s:Label?x="383"?y="67"?id="remote_result"/>??
  • (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读