龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

用AJAX+J2EE实现一个网上会议室系统(1)(3)

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
2、MVC处理部分的Action代码 在EasyJF的会议系统中,由于使用EasyJWeb作为MVC框架,因此处理Ajax比较简单,下面是会议室系统的核心Action主要代码。 package com

2、MVC处理部分的Action代码

在EasyJF的会议系统中,由于使用EasyJWeb作为MVC框架,因此处理Ajax比较简单,下面是会议室系统的核心Action主要代码。

package com.easyjf.chat.action;
public class ChatAction extends AbstractCmdAction {
 private ChatService chatRoom;
 public Object doBefore(WebForm form, Module module) {
// TODO Auto-generated method stub
if(chatRoom==null)chatRoom=ChatService.get((String)form.get("cid"));
 return super.doBefore(form, module);
 }
 public Page doInit(WebForm form, Module module) {
// TODO Auto-generated method stub
 return doMain(form,module);
 }
 //用户登录进入会议室
 public Page doMain(WebForm form, Module module) {
if(chatRoom!=null){
 ChatUser user=getChatUser();
 if(!chatRoom.join(user))form.addResult("msg","不能加入房间,可能是权限不够!");
 form.addResult("chatRoom",chatRoom);
 form.addResult("user",user);
}
else
{
 form.addResult("msg","会议未启动或者会议室不存在!");
}
return module.findPage("main");
 }
 //处理用户发言信息
 public Page doSend(WebForm form, Module module) {
if(chatRoom==null)return new Page("err","/err.html","thml");//返回会议室不存在的错误
Chat chat=(Chat)form.toPo(Chat.class);
chat.setCid(chatRoom.geneId());
chatRoom.talk(chat);
return doRecive(form,module);
 }
 //用户接收发言信息
 public Page doRecive(WebForm form, Module module) {
 if(chatRoom==null)return new Page("err","/err.html","thml");//返回会议室不存在的错误
 String lastReadId=CommUtil.null2String(form.get("lastReadId"));
 //System.out.println(lastReadId);
 form.addResult("list", chatRoom.getNewestMsg(getChatUser(),lastReadId));
 return module.findPage("msgList");
 }
 //用户刷新会议状态信息
 public Page doLoadConfig(WebForm form, Module module) {
if(chatRoom==null)return new Page("err","/err.html","thml");//返回会议室不存在的错误
form.addResult("userList", chatRoom.getUsers());
form.addResult("talkerList", chatRoom.getTalkers());
return module.findPage("config");
 }
 //用户退出
 public Page doExit(WebForm form, Module module) {
 if(chatRoom==null)return new Page("err","/err.html","thml");//返回会议室不存在的错误
 hatRoom.exit(getChatUser());
 form.addResult("msg","退出成功");
 ActionContext.getContext().getSession().removeAttribute("chatUser");
 return new Page("msg","/chat/xmlMsg.xml",Globals.PAGE_TEMPLATE_TYPE);
}

3、客户端AJAX部分核心代码

EasyJF会议系统中,服务器发送给客户端的都是格式化的xml文档数据。下面是核心的AJAX函数及发送接收会议信息的客户端代码。

function newXMLHttpRequest() {
 var xmlreq = false;
 if (window.XMLHttpRequest) {
xmlreq = new XMLHttpRequest();
 } else if (window.ActiveXObject) {
try {
 xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e1) {
 try {
 xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
 } catch (e2) {
 }
 }
}
return xmlreq;
}
//处理返回信息
//xmlHttp返回值,
//method:方法名 方法必须带一个参数如doRecive(xNode);
function handleAjaxResult(req,method) {
 return function () {
if (req.readyState == 4) {
 if (req.status == 200) {
// 将载有响应信息的XML传递到处理函数
var objXMLDoc=new ActiveXObject("Microsoft.XMLDOM");
objXMLDoc.loadXML(req.responseText);
eval("if(objXMLDoc.firstChild)"+method+"(objXMLDoc.firstChild.nextSibling);");
 } else {
//alert("HTTP error: "+req.status);
}
 }
}
 }
 //执行客户端Ajax命令
 //url 数据post地址
 //postData 发送的数据包
 //handleMethod 处理返回的方法
 function executeAjaxCommand(url,postData,handleMethod)
 {
var req = newXMLHttpRequest();
req.onreadystatechange =handleAjaxResult(req,handleMethod);
req.open("PO ST", url, true);
req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
req.setRequestHeader("charset","utf-8");
req.send(postData);
 }
 //用户发言
unction doSend()
{
 if(!check())return false;
 var msg=EditForm.content.value;
 var reciver=EditForm.reciver.value;
 var url="/chat.ejf?easyJWebCommand=send&cid="+roomId+"&lastReadId="+lastReadId;
 var postData="sender="+myName+"&reciver="+reciver+"&content="+msg;
 clearTimeout(reciveTime);
 executeAjaxCommand(url,postData,"recive");
 EditForm.content.value="";
}
//接收发言信息
function doRecive()
{
 var reciver=EditForm.reciver.value;
 var url="/chat.ejf?easyJWebCommand=recive&cid="+roomId+"&lastReadId="+lastReadId;
 executeAjaxCommand(url,"","recive");
}
//处理接收到的发言信息
function recive(list)
{
 var id="";
 for(var oNode=list.firstChild;oNode;oNode=oNode.nextSibling) // 依次分析每个节点
 {
chatContent.innerHTML+=showMsg(oNode);
id=oNode.getAttribute("cid");
 }
 if(id!="") lastReadId=id;
 chatContent.scrollTop=chatContent.scrollHeight;
 reciveTime=setTimeout("doRecive();",5000);
}

六、系统演示

大家可以到EasyJF开源团队的官方网站看程序演示效果,地址是:

http://www.easyjf.com/chatRoom.ejf?easyJWebCommand=show&ejid=2538093638804337 。

结束语

Ajax从技术上讲主要就是javascript、dhtml、css、xmldom、xmlhttp等一些我们很早就接触了的技术。而xmldom及xmlhttp也没有什么东西,写程序的时候把参考文档打开Copy就OK,dhtml及javascript涉及的东西就多了,不能只是看参考文档,需要把他真正消化,并能灵活动用,这就需要大家都练习了。笔者建议大家不要滥用Ajax。对于高手建议多研究一些业务及系统级算法设计等,对于新手嘛,把基本的技术(客户端的包括dhtml、css、javascript、xml等,J2EE服务器端的设计模式、UML建模、Servlet、JDBC或ORM系统、XML、EJB及一些框架、工具等)学好才是硬道理。

精彩图集

赞助商链接