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

阅读更多

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返回的数据显示在界面上。首先看下运行效果:

Flex通信-Java服务端通信实例_第1张图片

 

  • WebService通信

【Java端代码】

JDK提供了比较全面的webservice支持,为了简化开发步骤,我使用了Apache CXF框架实现WebService的开发部署。CXF的使用可以参照这里:http://blessht.iteye.com/blog/1105562

 

首先创建一个接口:

 

package webservice;

import javax.jws.WebService;

@WebService
public interface HelloWebservice {
	public String getWebservice(String name);
}

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

 

package webservice;

import javax.jws.WebService;

@WebService(endpointInterface="webservice.HelloWebservice",serviceName="hellows",portName="hellowsport")
public class HelloWebserviceImpl implements HelloWebservice{
	public String getWebservice(String name) {
		return "你好["+name+"]这是来自webservice的信息..."+this;
	}
}

 最后创建服务器端启动代码,只要运行main方法即可。当前WebService没有部署在tomcat之类的服务器下,而是通过jetty部署的:

 

package webservice;

import javax.xml.ws.Endpoint;

public 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
    }
	
	public 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端代码】

 


		



	
	
	

注意,WebService,HttpService和RemoteObject发送请求都是异步的,开发人员需要编写回调函数来获取返回数据。 

最后运行flex,在文本框中输入内容,点击发送按钮就能看到java服务端返回的数据。

 

 

  • HttpService通信

【java代码】

首先创建一个servlet,这里获取key值为"name"的数据(所以Flex端需要发送一个key为"name"的参数),最后通过PrintWriter.write的形式将结果返回给客户端。这是一个典型的Ajax请求响应例子。

public class HelloHttp extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		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:

	
		
	

	
	
	
	
 

 

  • RemoteObject通信

为了实现Flex调用Java代码,需要引入一个新的插件Blaseds。

把Blaseds项目WEB-INf下的flex文件夹拷贝到Java项目WEB-INF目录下,再将Blaseds项目下lib目录的jar文件引入到java项目中(注意jar文件冲突)。

随后编写一个Java类:

package blaseds;

import flex.messaging.FlexContext;

public class RemoteClass {
	public String helloRemote(String name){
		return "你好["+name+"]这是来自JavaRemote的消息...当前Session是:"+FlexContext.getHttpRequest().getSession();
	}
}

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

    
        flex.messaging.HttpFlexSession
    

    
    
    	MessageBrokerServlet
        MessageBrokerServlet
        flex.messaging.MessageBrokerServlet
        
            services.configuration.file
            /WEB-INF/flex/services-config.xml
       
        1
    
	
	
		RDSDispatchServlet
        RDSDispatchServlet
        flex.rds.server.servlet.FrontEndServlet
		
			useAppserverSecurity
			false
		        
        10
    

    
        RDSDispatchServlet
        /CFIDE/main/ide.cfm
    
    
    
        MessageBrokerServlet
        /messagebroker/*
    

 

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



	
		
	

	
		
	
	
	
	
		
			blaseds.RemoteClass
		
	

 随后将Java项目部署到服务器中。

 

【Flex端代码】

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


		
	


	
	
	
 

 

附件分享一下三种通信的实例代码

 

jar文件太大所以去掉了,大家可以自己去官网下载相应jar包

 

 

  • Flex通信-Java服务端通信实例_第2张图片
  • 大小: 38.5 KB
  • FlexToJava.rar (21.9 KB)
  • 下载次数: 166
  • JavaToFlex.rar (11.6 KB)
  • 下载次数: 135
  • 查看图片附件

你可能感兴趣的:(Flex通信-Java服务端通信实例)