利用DWR框架中的反向AJAX技术实现Web方式的在线聊天程序的应用示例.docx
- 文档编号:29463431
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:15
- 大小:130.85KB
利用DWR框架中的反向AJAX技术实现Web方式的在线聊天程序的应用示例.docx
《利用DWR框架中的反向AJAX技术实现Web方式的在线聊天程序的应用示例.docx》由会员分享,可在线阅读,更多相关《利用DWR框架中的反向AJAX技术实现Web方式的在线聊天程序的应用示例.docx(15页珍藏版)》请在冰豆网上搜索。
利用DWR框架中的反向AJAX技术实现Web方式的在线聊天程序的应用示例
1.1利用DWR框架中的反向AJAX技术实现Web方式的在线聊天程序的应用示例
1.1.1“全推”和“半推”相关技术
1、“全推”和“半推”相关技术概述
所谓“全推”技术是指所有的客户端都能看到服务器端程序推出的全部内容,而且所看到的信息是相同的;而“半推”技术就是针对特定的客户端或者部分客户端看到服务器端程序推出的不同的信息内容——也就是可以根据客户的权限不同,客户看到的服务端程序推送出的信息内容也是不一样的。
功能实现的核心思路为:
每创建一个ScriptSession,就用户id和页面脚本session绑定。
1.1.2“全推”和“半推”相关技术的功能实现的程序代码示例
1、在系统的部署描述web.xml文件中配置回传(PiggyBack)方式
为了能够在项目中应用回传(PiggyBack)方式,需要在系统的部署描述web.xml文件中配置定义,主要的配置定义的代码示例如下,并注意其中黑体标识的代码示例:
2、在示例项目中添加描述用户信息的实体类组件
(1)程序类名称为UserInfoPO,程序包名称为com.px1987.webcrm.model.po,如下为创建程序类UserInfoPO的局部截图
(2)在UserInfoPO程序类中添加如下的成员属性
privateStringuserID;
privateStringuserName;
(3)并为它们提供get/set方法
(4)UserInfoPO程序类最终的代码示例
packagecom.px1987.webcrm.model.po;
publicclassUserInfoPO{
privateStringuserID;
publicStringgetUserID(){
returnuserID;
}
publicvoidsetUserID(StringuserID){
this.userID=userID;
}
publicStringgetUserName(){
returnuserName;
}
publicvoidsetUserName(StringuserName){
this.userName=userName;
}
privateStringuserName;
publicUserInfoPO(){
}
publicUserInfoPO(StringuserID,StringuserName){
super();
this.userID=userID;
this.userName=userName;
}
}
3、添加聊天信息管理功能的程序类
(1)程序类名称为ChatInfoManager,程序包名称为com.px1987.webcrm.model
(2)编程ChatInfoManager程序类的功能实现代码
packagecom.px1987.webcrm.model;
importjava.util.ArrayList;
importjava.util.Collection;
importjava.util.HashSet;
importjava.util.List;
importjavax.servlet.ServletContext;
importjavax.servlet.http.HttpServletRequest;
importorg.directwebremoting.Browser;
importorg.directwebremoting.ScriptSession;
importorg.directwebremoting.ServerContext;
importorg.directwebremoting.ServerContextFactory;
importorg.directwebremoting.WebContextFactory;
importorg.directwebremoting.proxy.dwr.Util;
importcom.px1987.webcrm.model.po.UserInfoPO;
publicclassChatInfoManager{
publicChatInfoManager(){
}
publicstaticList
/**
*更新在线用户列表
*@paramsomeOneUserName待添加到列表的用户名
*@paramisAddUserInfo是添加用户到列表(为true),还是只获得当前列表(为false)
*@paramrequest
*@return用户userID
*/
publicStringupdateUsersList(StringsomeOneUserName,booleanisAddUserInfo,
HttpServletRequestrequest){
UserInfoPOoneUserInfo=null;
if(isAddUserInfo){//这里取会话(HttpSession)的sessionID为用户的编号ID
oneUserInfo=newUserInfoPO(request.getSession().getId(),someOneUserName);
allUserInfos.add(oneUserInfo);//保存用户到列表
//将用户id和页面脚本session绑定
this.setScriptSessionFlag(oneUserInfo.getUserID());
}
//获得DWR上下文
ServletContextoneServletContext=request.getSession().getServletContext();
ServerContextoneServerContext=ServerContextFactory.get(oneServletContext);
//获得当前浏览chatIndex.jsp页面的所有脚本session
Collectionsessions=oneServerContext.
getScriptSessionsByPage(request.getContextPath()+"/chatIndex.jsp");
UtiloneUtil=newUtil(sessions);
/*
*利用Util工具类中的方法直接处理页面中的标签元素的值,其中的userID和userName为UserInfoPO类中的成员属性名
*/
oneUtil.removeAllOptions("allOnLineUserInfosTagID");
oneUtil.addOptions("allOnLineUserInfosTagID",allUserInfos,"userName");
oneUtil.removeAllOptions("receiverTagID");
oneUtil.addOptions("receiverTagID",allUserInfos,"userID","userName");
if(!
isAddUserInfo){
returnnull;
}
returnoneUserInfo.getUserID();
}
/**
*将用户userID和页面脚本session绑定
*@paramuserID
*/
publicvoidsetScriptSessionFlag(StringuserID){
WebContextFactory.get().getScriptSession().setAttribute("userID",userID);
}
/**
*根据用户userIDString获得指定用户的页面脚本session
*@paramuserIDString
*@paramrequest
*@return
*/
@SuppressWarnings("unchecked")
publicScriptSessiongetScriptSession(StringuserIDString,HttpServletRequestrequest){
ScriptSessioncurrentScriptSession=null;
Collection
allSessions.addAll(ServerContextFactory.get(request.getSession().getServletContext())
.getScriptSessionsByPage(request.getContextPath()+"/chatIndex.jsp"));
for(ScriptSessiononeSession:
allSessions){
StringsomeOneUserID=(String)oneSession.getAttribute("userID");
if(someOneUserID!
=null&&someOneUserID.equals(userIDString)){
currentScriptSession=oneSession;
}
}
returncurrentScriptSession;
}
/**
*推送消息时,只推送给指定ScriptSession的用户
*@paramsenderName发送者
*@paramreceiverUserID接收者id
*@paramsomeOneMessageTextContent消息内容
*@paramrequest
*/
publicvoidsendChatMessageInfo(StringsenderName,StringreceiverUserID,
StringsomeOneMessageTextContent,HttpServletRequestrequest){
ScriptSessioncurrentScriptSession=this.getScriptSession(receiverUserID,request);
UtiloneUtil=newUtil(currentScriptSession);
oneUtil.setStyle("showMessageTagID","display","");
oneUtil.setValue("senderTagID",senderName);
oneUtil.setValue("messageInfoTagID",someOneMessageTextContent);
}
}
4、在项目示例的DWR配置定义文件dwr.xml中添加如下的配置定义项目
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEdwrPUBLIC"-//GetAheadLimited//DTDDirectWebRemoting3.0//EN""http:
//getahead.org/dwr/dwr30.dtd">
5、聊天主页面chatIndex.jsp文件的代码示例
(1)chatIndex.jsp文件的代码示例
<%@pageisELIgnored="false"pageEncoding="GB18030"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http:
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
//www.w3.org/1999/xhtml">
rel="stylesheet"type="text/css"/> src="${pageContext.request.contextPath}/dwr/engine.js"> src="${pageContext.request.contextPath}/dwr/interface/JavascriptChatManager.js"> includepage="/commonPage/pageHead.jsp"> include> includepage="/commonPage/navMenuBar.jsp"> include> 昵称: onclick="saveRegisterUserInfo(this);"/> 我要对 id="receiverTagID"disabled=true"> 说: id="messageInputName"disabled="true"/> id="sendInputButtonName"name="sendInputButtonName" disabled="true"onclick="sendMessageToSomeOneFriend();"/> 目前在线的各个用户: none"> includepage="/commonPage/authorInfo.jsp"> include>