在上一篇文章中我们已经讲解了如何创建一个简单的as端的编辑,那么接下来要实现的就是与我们的javaweb相结合的实现,那么我们要实现二者的结合,那么也要做好事先的准备工作,首先你要下载以下的文件。
一、myeclipse 的IDE。
二、tomcat6.0。
三、mysql或者oracle数据库。
四、下载com.adobe.serialization.json.JSON这个as的包把他丢到我们的as工程里面去。
我们下载并安装好以上的这些软件以后,打开我们的myeclipse创建一个我们的web工程,在这里我采用的是三大框架,因此三大框架的配置文件什么的就不说了,这些不懂的自己百度去,网上很多这些的资料,默认我这里已经完全配置好了三大框架,数据库的库表也事先完全设计好了,建表语句大家可以去下面的网址下载去:
那么我们现在已经建立起来我们的工程了,在web端我就介绍传送回服务器端的json数据的方法,所有的源代码都在这个地址里http://download.csdn.net/detail/linzhefeng78/5823715
/**
* 功能描述:获取房间号,跳转到相应的房间
* @return
*/
public void getRoomOwnerByIdAction(){
// 获取房间所有者和登录的信息的集合
List<UserVO> vuList = videoService.getRoomOwnerByIdService(videoMeetingInfoVO);
try{
String json = "";
json += "{\"userLoginName\":\""+vuList.get(1).getUser_name()+"_"+videoMeetingInfoVO.getVideo_meeting_info_seq()+"\",";
json += "\"roomOwner\":\""+vuList.get(0).getUser_name()+"_"+videoMeetingInfoVO.getVideo_meeting_info_seq()+"\"}";
HttpServletResponse reposne = ServletActionContext.getResponse();
reposne.setCharacterEncoding("UTF-8");
reposne.getWriter().print(json);
}catch (Exception e) {
e.printStackTrace();
}
}
那么我们的web端的响应服务器端已经完全做好了,然后我们再打开我们的flex项目,对我们的flex项目进行改造,首先我们改造我们的msSoSync方法
/*
* 功能描述:监听远程共享对象
*/
private function mySoSync(e:SyncEvent):void{
hostListArray = new Array();
audienceListArray = new Array();
if(jsonDataArray==null){
var vju:VisitJavaUtil = new VisitJavaUtil("video!getMeetingUserByIdAction.action?temp=temp&videoMeetingInfoVO.video_meeting_info_seq=1");// 获取远程web服务器端传回来的数据
var t:Timer = new Timer(100);
t.addEventListener(TimerEvent.TIMER,function(event:TimerEvent):void{
if(vju.getJsonData()!=""){
t.stop();
jsonDataArray = JSON.decode(vju.getJsonData());
// 循环判断用户的权限
for(var loginUser:Object in mySO.data){
var hasUser:Boolean = false;
sec:for(var i:int=0;i<jsonDataArray.length;i++){
var user_power_name:String = jsonDataArray[i].user_name;
trace(user_power_name+"==>"+loginUser+"---"+i)
if(loginUser==user_power_name){
// 如果登录的用户具有权限就put到具有用户权限的集合里面去
hostListArray.push(loginUser);
hasUser = true;
break sec;
}
}
if(hasUser==false){
// 如果登录的用户不具有权限就put到没有用户用户权限的集合里面去
audienceListArray.push(loginUser);
}
}
// 将具有权限的用户的数组赋给audienceList集合
audienceList.dataProvider = audienceListArray;
// 将不具有权限的用户的数组赋给hostList集合
hostList.dataProvider = hostListArray;
}
})
t.start();
}else{
// 循环判断用户的权限
for(var loginUser:Object in mySO.data){
var hasUser:Boolean = false;
sec:for(var i:int=0;i<jsonDataArray.length;i++){
var user_power_name:String = jsonDataArray[i].user_name;
//trace(user_power_name+"==>"+loginUser+"---"+i)
if(loginUser==user_power_name){
// 如果登录的用户具有权限就put到具有用户权限的集合里面去
hostListArray.push(loginUser);
hasUser = true;
break sec;
}
}
if(hasUser==false){
// 如果登录的用户不具有权限就put到没有用户用户权限的集合里面去
audienceListArray.push(loginUser);
}
}
// 将具有权限的用户的数组赋给audienceList集合
audienceList.dataProvider = audienceListArray;
// 将不具有权限的用户的数组赋给hostList集合
hostList.dataProvider = hostListArray;
}
}
然后再将我们前面的对按钮和文本框的监听全加入进来
public function sendAudienceMsgByMouse(event:MouseEvent):void{
this.sendAudienceMsg();
}
/**
* 功能描述: 发送普通用户的消息到公屏
**/
public function sendAudienceMsg():void{
var audienceMsg:String = audienceMess.text;
var tm:Date = new Date();
if(audienceMsg==""){
audienceShowMess.htmlText += "<font size='15' color='#acf'>不能发送空的消息!</font>";
audienceShowMess.verticalScrollPosition = audienceShowMess.maxVerticalScrollPosition;
}else if(audienceMsg.length>50){
audienceShowMess.htmlText += "<font size='15' color='#acf'>最多只能输入50个字符!</font>";
audienceShowMess.verticalScrollPosition = audienceShowMess.maxVerticalScrollPosition;
}else {
// 获取用户输入的数据
audienceMsg = "<font color='#acf' size='12'>"+userLoginName.split("_")[0]+"说: "+tm.getFullYear()+"年"+(tm.getMonth()+1)+"月"+tm.date+"日 "+tm.getHours()+":"+tm.getMinutes()+":"+tm.getSeconds()+"\n</font><font size='14' color='#ff0000'> "+audienceMess.text+"</font>";
myNC.call("msgFromClient",null,"ut1","ut2",audienceMsg,"audienceMsg",hostListArray);
myNC.call("msgFromClient",null,"ut1","ut2",audienceMsg,"audienceMsg",audienceListArray);
}
audienceMess.htmlText = "";
}
public function sendMsgByMouse(event:MouseEvent):void{
this.sendMsg();
}
public function sendMsgByKey(event:KeyboardEvent):void{
if(event.keyCode==13){
this.sendMsg();
}
}
/**
* 功能描述:发送消息
**/
public function sendMsg():void{
var Msg:String = hostMess.text;
var tm:Date = new Date();
if(Msg==""){
hostShowMess.htmlText += "<font size='15' color='#acf'>不能发送空的消息!</font>";
hostShowMess.verticalScrollPosition = hostShowMess.maxVerticalScrollPosition;
}else if(Msg.length>20){
hostShowMess.htmlText += "<font size='15' color='#acf'>最多只能输入20个字符!</font>";
hostShowMess.verticalScrollPosition = hostShowMess.maxVerticalScrollPosition;
}else{
// 获取用户输入的数据
Msg = "<font color='#acf' size='12'>"+userLoginName.split("_")[0]+"说: "+tm+"\n</font><font size='14' color='#ff0000'> "+hostMess.text+"</font>";
myNC.call("msgFromClient",null,"ut1","ut2",Msg,"hostMsg",hostListArray);
myNC.call("msgFromClient",null,"ut1","ut2",Msg,"hostMsg",audienceListArray);
}
hostMess.text = "";
}
/**
* 功能描述:客户端获取服务器端的数据
**/
public function msgFromSrvr(msg:String,tip:String):void{
trace("客户端获取服务器端的数据=>"+msg);
if(tip=="hostMsg"){
hostShowMess.htmlText += msg;
}else{
audienceShowMess.htmlText += msg;
}
}
对于里面的VisitJavaUtil这是一个获取远程数据的一个工具类代码如下:
package com.mtv.util
{
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.utils.Timer;
/**
* 类描述:访问javaWeb端
**/
public class VisitJavaUtil
{
// 定义URLRequest对象
private var javaRequest:URLRequest;
// 定义URLLoader对象
private var javaLoader:URLLoader;
// javaweb端获取到的远程数据
private var jsonDATA:String="";
// 相应web端的地址
private var actionPath:String;
public function VisitJavaUtil(actionPath:String):void{
this.actionPath = actionPath;
this.startLoader();
}
/**
* 功能描述:获取响应远程web端的数据
**/
public function startLoader():void{
javaRequest = new URLRequest("http://127.0.0.1:8080/bookSysSSH/"+actionPath);
javaLoader = new URLLoader();
configureListeners(javaLoader);
try{
javaLoader.load(javaRequest);
}catch(e){
trace("==>"+e);
}
}
/**
* 功能描述:获取web端返回的json数据
**/
public function getJsonData():String{
return jsonDATA;
}
// 分派监听事件
private function configureListeners(dispathcer:IEventDispatcher):void{
dispathcer.addEventListener(Event.COMPLETE,javaLoaderComplete);
dispathcer.addEventListener(IOErrorEvent.IO_ERROR,javaLoaderError);
}
// 加载成功以后响应的事件
private function javaLoaderComplete(event:Event):void{
trace("加载java远程数据=》"+event.target.data)
jsonDATA = event.target.data;
}
// 加载失败以后响应的事件
private function javaLoaderError(event:Event):void{
jsonDATA = "false";
trace("=====加载java远程数据失败!======")
}
}
}
那么到了这里我们的整个项目已经完全实现了我们想要的功能了。