快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡亰app是真的吗_龟发之家论坛



当你有QQ消息时,QQ的小图标会晃荡,我们以致还可以设定QQ有消息时,自动弹出来!

这些在C/S模式下很轻易实现!假如要在B/S模式若何来实现呢?

我们的肯定会想到在客服端调用ajax在后台赓续的查询办事器.看是否有关于自己的消息.假如有则查询返回.这种做法肯定会大年夜量的占用系统的资本!弗成取!

现在DWR的反转AJAX功能.容许我们从办事器端来节制客服端.而不必要客户端来哀求.办事器可以自动把消息发给指定的客户端!

我不能把公司的代码贴出来,以是我自己写了一个DEMO,已经实现了对指定用户发送消息的功能,并且即时显示在指定的用户界面上面.当然你可以改动这些,让它弹出来显示,或者像QQ一样在你页面的某个角落让消息的图标明灭:)

下面我做一个简单的阐明:

用户的JAVABEAN User.java

package com.lhq;

/**

* 用户类

*

* @author 廖瀚卿

*

*/

public class User {

private String userid;

private String username;

public String getUserid() {

return userid;

}

public void setUserid(String userid) {

this.userid = userid;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public User澳门新葡亰app是真的吗(String userid, String username) {

super();

this.userid = userid;

this.username = username;

}

}

谈天处置惩罚类 ChatManager.java

package com.lhq;

import java.util.ArrayList;

import java.util.Collection;

import java.util.HashSet;

import java.util.List;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpServletRequest;

import org.directwebremoting.ScriptSession;

import org.directwebremoting.ServerContext;

import org.directwebremoting澳门新葡亰app是真的吗.ServerContextFactory;

import org.directwebremoting.WebC澳门新葡亰app是真的吗ontextFactory;

import org.directwebremoting.proxy.dwr.Util;

/**

* 处置惩罚谈天相关

*

* @author 廖瀚卿

*

*/

public class ChatManager {

/** 保存当前在线用户列表 */

public static List users = new ArrayList();

/**

* 更新在线用户列表

* @param username 待添加到列表的用户名

* @param flag 是添加用户到列表,照样只获适合前列表

* @param request

* @return 用户userid

*/

public String updateUsersList(String username, boolean flag, HttpServletRequest request) {

User user = null;

if (flag) {

// 这里取会话(HttpSession)的id为用户id

user = new User(request.getSession().getId(), usernam澳门新葡亰app是真的吗e);

//保存用户到列表

users.add(user);

//将用户id和页面脚本session绑定

this.setScriptSessionFlag(user.getUserid());

}

//得到DWR高低文

ServletContext sc = request.getSession().getServletContext();

ServerContext sctx = ServerContextFactory.get(sc);

//获适合前浏览 index.jsp 页面的所有脚本session

Collection sessions = sctx.getScriptSessionsByPage("/chat/index.jsp");

Util util = new Util(sessions);

//处置惩罚这些页面中的一些元素

util.removeAllOptions("users");

util.addOptions("users", users, "username");

util.removeAllOptions("receiver");

util.addOptions("receiver", users,"userid","username");

if(!flag){

return null;

}

return user.ge澳门新葡亰app是真的吗tUserid();

}

/**

* 将用户id和页面脚本session绑定

* @param userid

*/

public void setScriptSessionFlag(String userid) {

WebContextFactory.get().getScriptSession().setAttribute("userid", userid);

}

/**

* 根据用户id得到指定用户的页面脚本session

* @param userid

* @param request

* @return

*/

@SuppressWarnings("unchecked")

public ScriptSession getScriptSession(String userid, HttpServletRequest request) {

ScriptSession scriptSessions = null;

Collection sessions = new HashSet();

sessions.addAll(ServerContextFactory.get(request.getSession().getServletContext())

.getScriptSessionsByPage("/chat/index.jsp"));

for (ScriptSession session : sessions) {

String xuserid = (String) session.getAttribute("userid");

if (xuserid != null && xuserid.equals(userid)) {

scriptSessions = session;

}

}

return scriptSessions;

}

/**

* 发送消息

* @param sender 发送者

* @param receiverid 接管者id

* @param msg 消息内容

* @param request

*/

public void send(String sender,String receiverid,String msg,HttpServletRequest request){

ScriptSession session = this.getScriptSession(receiverid, request);

Util util = new Util(session);

util.setStyle("showMessage", "display", "");

util.setValue("sender", sender);

util.setValue("msg", msg);

}

}

聊天主页面 index.jsp

昵称:

我要对

说:

在线用户列表:

对你说:

JAVASCRIPT 文件 chat.js

/**

* 注册帐号

*/

function register(button) {

if ($('username').value == "" || $('username').value.length0) {

$('userid').value = data; // 注册成功,把userid放到当前页面

}

});

}

/**

* 页面初始化

*/

function init() {

dwr.engine.setActiveReverseAjax(true); // 激活反转 紧张

ChatManager.updateUsersList(null, false); // 当你打开界面的时刻,先得到在线用户列表.

}

/**

* 发送消息

*/

function send() {

var sender = dwr.util.getValue('username'); // 得到发送者名字

var receiver = dwr.util.getValue('receiver'); // 得到吸收者id

var msg = dwr.util.getValue('message'); // 得到消息内容

ChatManager.send(sender, receiver, msg); // 发送消息

}

window.onload = init;//页面加载完毕后履行初始化措施init

设置设置设备摆设摆设文件 web.xml

index.jsp

dwr-invoker

org.directwebremoting.servlet.DwrServlet

调试DWR,宣布系统时应将其设为false

debug

true

应用办事器推技巧(反转AJAX)

activeReverseAjaxEnabled

true

initApplicationScopeCreatorsAtStartup

true

maxWaitAfterWrite

100

4

dwr-invoker

/dwr/*

DWR设置设置设备摆设摆设文件 dwr.xml

附上Demo源码:http://bbs.fengfly.com/thread-134-1-1.html

您可能还会对下面的文章感兴趣: