聊天业务类 主要业务 源代码如下:
package com.dwr;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.servlet.http.HttpSession;
import org.directwebremoting.Browser;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.ScriptSessions;
import org.directwebremoting.WebContextFactory;
import com.vo.User;
public class ChatDwr {
public ChatDwr() {
System.out.println("实例化");
}
// sessionId和User对象
public static Map<String, User> map = new HashMap<String, User>();
// 登陆
public boolean login(String username) {
// session
HttpSession session = WebContextFactory.get().getSession();
// 键同,值不同(注销,put)
// 键不同,值同(则在别处登陆,提示)
// 键不同,值不同(新用户,put)
//activeReverseAjaxEnable
for (Entry<String, User> user : map.entrySet()) {
String sid = user.getKey();
String name = user.getValue().getName();
if (name.equalsIgnoreCase(username) && !sid.equals(session.getId()))
return true;//在别处登陆
else if (username.equals("") && sid.equals(session.getId())) {
map.remove(sid);
break;
}
}
// 保存用户
ScriptSession ss = WebContextFactory.get().getScriptSession();
if (username.length() > 0) {
map.put(session.getId(), new User(ss.getId(),username));
ss.setAttribute("username", username);
}
// 添加数据到用户列表
Browser.withAllSessions(new Runnable() {
public void run() {
ScriptSessions.addFunctionCall("addUser", map.values());
}
});
session.setAttribute("username", username);
return false;
}
// 发送消息
public boolean sendMsg(
final String toId, final String toName, final String msg) {
final HttpSession session = WebContextFactory.get().getSession();
final String from = (String) session.getAttribute("username");
if (from==null || from.equals(toName))
return false;
Browser.withSession(toId, new Runnable() {
public void run() {
ScriptBuffer buff = new ScriptBuffer();
buff.appendCall("recv", from, toName, msg, new Date());
ScriptSession ss = Browser.getTargetSessions().iterator()
.next();
ss.addScript(buff);
}
});
return true;
}
}
--------------------------------------------------------------- 聊天业控制类 源代码如下:
package com.servlets;
import java.io.IOException;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.directwebremoting.Browser;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.ScriptSessions;
import org.directwebremoting.ServerContextFactory;
import org.directwebremoting.WebContextFactory;
import com.dwr.ChatDwr;
public class ExitGameServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
final HttpSession session = request.getSession(false);
if (session != null) {
Browser.withAllSessions(new Runnable() {
public void run() {
System.out.println("来了");
ChatDwr.map.remove(session.getId());
session.invalidate();
ScriptSessions.addFunctionCall("addUser", ChatDwr.map
.values());
}
});
}
}
}
------------------------------------------------------------ 聊天vo类 源代码如下:
package com.vo;
public class User {
private String id; //scriptSessionId
private String name;
private String sid; //sessionId
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(String id, String name) {
super();
this.id = id;
this.name = name;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public User(String id, String name, String sid) {
super();
this.id = id;
this.name = name;
this.sid = sid;
}
}
分享到:
相关推荐
综上所述,这个项目展示了一个基于DWR的实时聊天系统实现,它利用了J2EE的稳定性、DWR的双向通信能力、Servlet的请求处理功能以及JavaScript的客户端交互性,创建了一个无需数据库支持的高效聊天应用。用户可以进行...
在本项目"**DWR操作数据库模拟实现Google搜索效果**"中,我们将探讨如何利用DWR技术来创建一个类似Google搜索的体验。这个项目的核心目标是通过用户在前端输入关键词,实时从后台数据库中检索匹配的信息,并在页面上...
实现聊天功能,首先我们需要配置Spring3的环境,包括创建Spring配置文件,定义Bean来封装业务逻辑和服务接口。例如,我们可以创建一个`ChatService`接口和其实现类,处理发送和接收消息的业务逻辑,使用Spring的`@...
本教程通过一个简单的聊天室应用,深入探讨DWR的核心功能和使用方法。** ### 1. DWR基本原理 DWR通过在服务器端部署一个Servlet,这个Servlet处理来自客户端的AJAX请求,并将结果以JSON或XML格式返回。在客户端,...
**四、DWR操作数据库模拟实现Google搜索效果** 为了实现类似Google的搜索效果,DWR可以帮助我们在用户输入查询词时立即从数据库中检索匹配的条目。每当用户在搜索框中键入字符,DWR会自动发送异步请求,查询数据库...
在这个在线即时聊天系统中,DWR被用来创建一个高效、用户友好的通信层,使得客户端(通常是浏览器中的JavaScript)能够直接调用服务器端的Java方法,就像它们是本地函数一样。这种技术极大地简化了AJAX...
Java+dwr框架实现聊天室是使用Java语言和dwr框架实现的服务器推技术,实现了实时通信的聊天室功能。下面将详细介绍该技术的实现过程和相关知识点。 一、dwr 框架简介 dwr(Direct Web Remoting)是一种基于Ajax...
Spring框架和Direct Web Remoting (DWR) 是构建Web应用程序的强大组合,尤其适用于实现动态、实时的交互功能,如无刷新聊天室。这个项目展示了如何利用这两个技术来创建一个无需刷新页面就能进行实时通信的聊天应用...
在Spring MVC环境下,DWR可以帮助我们构建实时的、交互式的用户界面,比如实现即时聊天功能。下面将详细介绍如何在Spring MVC项目中利用DWR反转实现即时聊天。 首先,我们需要引入必要的依赖库。如描述中提到,我们...
DWR(Direct Web Remoting)是一个...通过以上步骤,我们可以利用DWR和JSP实现一个高效、无刷新的分页功能,为用户提供更加流畅的浏览体验。在实际开发中,还需要结合具体的业务需求和项目架构进行适当的调整和优化。
Spring整合DWR(Direct Web Remoting)以实现Comet技术,是构建实时、无刷新的多人聊天室的一种高效方法。这种技术允许服务器向客户端推送数据,而无需客户端频繁发起请求,从而大大提升了用户体验。下面我们将深入...
在数据库操作中,DWR可以帮助开发者实现实时的数据查询、插入、更新和删除。例如,你可以创建一个JavaScript函数,该函数调用DWR的接口,执行SQL查询并获取结果。这些结果可以直接在页面上显示,而无需重新加载页面...
在本项目“学DWR时候写的一个简单的聊天室”中,DWR被用于实现用户之间的实时通信。用户可以通过浏览器发送消息,而无需刷新页面,因为DWR可以实现在后台与服务器进行通信并更新页面内容。 【Hibernate ORM框架】 ...
在DWR中,可以使用Comet技术来实现聊天系统的实时推送功能,使用户在接收到新消息时无需刷新页面。 5. **群聊实现**: 在这个项目中,开发者使用DWR构建了一个支持多用户参与的聊天系统。每个用户都能即时看到其他...
**DWR(Direct Web Remoting)框架是一种在Web应用程序中实现AJAX(Asynchronous JavaScript and XML)技术的工具,它允许JavaScript与服务器端的Java代码进行实时交互,从而创建更动态、更响应式的用户界面。...
DWR 在线即时聊天系统,实现了对指定用户发送消息,和即时显示功能.rarDWR 在线即时聊天系统,实现了对指定用户发送消息,和即时显示功能.rarDWR 在线即时聊天系统,实现了对指定用户发送消息,和即时显示功能.rarDWR 在线...
【标题】"界面简单功能简单的聊天程序dwr" 涉及的核心技术是DWR(Direct Web Remoting),它是一个开源的Java库,允许Web应用程序在客户端和服务器之间进行实时的、异步的通信,无需使用插件或者复杂的浏览器技术如...
`ajax登录`可能是一个实际的DWR应用示例,展示如何实现无刷新的登录功能。`dwrdemo`可能是一个完整的DWR演示项目,包含运行示例的源代码。`dwr需要用的jar`是DWR运行所需的库文件。`Ajax无刷新页的业务逻辑实现`可能...
DWR(Direct Web Remoting)是一个开源的Java框架,它允许Web应用程序轻松地在客户端JavaScript和服务器端Java之间进行交互,实现Ajax(异步JavaScript和XML)功能。DWR简化了复杂的JavaScript和Java之间的通信,...
例如,在一个用户查询操作的场景中,JSP页面可能使用DWR来触发一个Java方法,这个方法利用数据库缓存池获取连接,执行SQL查询,然后将结果返回给DWR,最终DWR将查询结果展示在前端页面上。在这个过程中,DWR保证了...