2010.04.09(4)———dwr 点对点
这个还是有点问题的 ,就是聊天记录的问题 聊天的内容被覆盖了
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 以设置下格式固定,可复制使用 -->
<display-name>ajaxDWR</display-name>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
<init-param>
<description>实现调试,在debug请设置为false</description>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<description>使用服务器推技术(反转AJAX)</description>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>
initApplicationScopeCreatorsAtStartup
</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>maxWaitAfterWrite</param-name>
<param-value>100</param-value>
</init-param>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
User类
package dddd;
public class User {
private String name;
private String id;
public User(String name, String id) {
super();
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Chat.java
package dddd;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.ServerContext;
import org.directwebremoting.ServerContextFactory;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;
public class Chat {
/**
* 保存当前在线用户列表
*/
private static List<User> users = new ArrayList<User>();
/**
* 更新在线用户列表
* @param username 待添加到列表的用户名
* @param flag 是添加用户到列表,还是只获得当前列表
* @param request
* @return 用户id
*/
public String updateUserList(String name,boolean flag,HttpServletRequest request){
User user = null;
if(flag){
// 这里取会话(HttpSession)的id为用户id
user = new User(name,request.getSession().getId());
//保存用户到列表
users.add(user);
//将用户id和页面脚本session绑定
this.setScriptSessionAndUserId(user.getId());
}
//获得DWR上下文
ServletContext sc = request.getSession().getServletContext();
ServerContext DWRsc = ServerContextFactory.get(sc);
//获得当前浏览 index.jsp 页面的所有脚本session
Collection sessions = DWRsc.getScriptSessionsByPage("/chat2/index.jsp");
Util util = new Util(sessions);
util.removeAllOptions("userList");
//值和显示的内容都是object的name属性
util.addOptions("userList", users,"name");
util.removeAllOptions("selects");
//"selects"中的每一个选项select对应users的每一个对象 object,object的id属性时select的值,object的name属性时select显示的内容
util.addOptions("selects", users, "id", "name");
if(!flag){
return null;
}
return user.getId();
}
/**
* 将用户id和页面脚本session绑定
* @param id
*/
private void setScriptSessionAndUserId(String id){
WebContextFactory.get().getScriptSession().setAttribute("userId", id);
}
/**
* 根据用户id获得指定用户的页面脚本session
* @param userid
* @param request
* @return
*/
private Collection<ScriptSession> getScriptSession(String userId,String myId,HttpServletRequest request){
Collection<ScriptSession> list = new HashSet<ScriptSession>();
Collection<ScriptSession> scriptSessions = new HashSet<ScriptSession>();
scriptSessions.addAll(ServerContextFactory.get(request.getSession().getServletContext())
.getScriptSessionsByPage("/chat2/index.jsp"));
for(ScriptSession o : scriptSessions){
String id = (String)o.getAttribute("userId");
if(id!=null&&id.equals(userId)||id!=null&&id.equals(myId)){
list.add(o);
}
}
return list;
}
/**
* 发送消息
* @param sender 发送者
* @param receiverid 接收者id
* @param message 消息内容
* @param request
*/
public void send(String sender,String myId,String receiverId,String message,String oldMessage,HttpServletRequest request){
Collection<ScriptSession> sessions = this.getScriptSession(receiverId, myId,request);
Util util = new Util(sessions);
//util.setStyle("showMessage", "display", "mm");
// ScriptBuffer script = new ScriptBuffer();
// script.appendScript("dwr.util.byId('showMessage').style.display=''");
// session.addScript(script);
if(oldMessage!=null||oldMessage.equals("")){
util.setValue("msg", oldMessage+"\n"+sender+"说:\n"+" "+message);
}else{
util.setValue("msg", sender+"说:/n"+" "+message);
}
util.setValue("message","");
}
}
dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
<!-- 对后台类的配置格式确定 -->
<allow>
<!-- Chat类要用到User这个类 就可以这样写-->
<convert converter="bean" match="dddd.User"/>
<create creator="new" javascript="Chat">
<param name="class" value="dddd.Chat" />
</create>
</allow>
</dwr>
jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>点对点</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type='text/javascript' src='dwr/util.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/interface/Chat.js'></script>
<script type="text/javascript">
/**
* 注册帐号
*/
function register(button) {
if ($('username').value == "" || $('username').value.length <= 0) {
alert("请输入昵称");
return;
}
/* 下面是对一些按钮的禁用和激活操作 */
$('username').disabled = true;
$('button').disabled = true;
$('message').disabled = false;
$('send').disabled = false;
$('selects').disabled = false;
/* 把我输入的用户名注册到服务器,并获得用户id(这里用session id 代替) */
Chat.updateUserList($('username').value, true, function(data) {
if (data != null && data.length > 0) {
$('userid').value = data; // 注册成功,把userid放到当前页面
}
});
}
/**
* 页面初始化
*/
function init() {
dwr.engine.setActiveReverseAjax(true); // 激活反转 重要
Chat.updateUserList(null, false); // 当你打开界面的时候,先获得在线用户列表.
}
/**
* 发送消息
*/
function send() {
var sender = dwr.util.getValue('username'); // 获得发送者名字
var receiver = dwr.util.getValue('selects'); // 获得接受者id
var msg = dwr.util.getValue('message'); // 获得消息内容
var oldMsg = dwr.util.getValue("msg");
//$("showMessage").style.display="";
var myId = dwr.util.getValue("userid");
Chat.send(sender, myId,receiver, msg,oldMsg); // 发送消息
}
window.onload = init;//页面加载完毕后执行初始化方法init
</script>
</head>
<body>
<input type="hidden" name="userid" id="userid" />
<br>
昵称:
<input type="text" name="username" id="username"/>
<input type="button" value="注册" id="button" onclick="register(this);" />
<br />
<br />
我要对
<select name="selects" id="selects" disabled="true" >
</select>
说:
<input type="text" name="message" id="message" disabled="true" />
<input type="button" value="发送" id="send" name="send" disabled="true"
onclick="send();" />
<br />
<br />
在线用户列表:
<ul id="userList">
</ul>
<textarea rows="20" cols="60" readonly="readonly" id="msg" name="msg"></textarea>
</body>
</html>
分享到:
相关推荐
dwr包.rar dwr.jar engine.js util.js dwr-noncla.jar readme.txt JAR File: dwr.jar (1.08Mb) To DWR enable your web-app WAR File: dwr.war (4.62Mb) Demos/Examples of what DWR can do Sources: dwr-...
通过分析这个war文件,开发者可以学习如何配置DWR的XML配置文件(dwr.xml),以及如何创建可从JavaScript调用的Java方法。 3. **DWR2.0中文说明文档**: 这份文档对于理解DWR的工作原理和使用方法至关重要,特别是...
"dwrDemo.war.zip" 是一个包含DWR2.0测试应用的WAR(Web应用程序归档)文件,"dwr_dwr.w"可能是DWR配置或服务相关的文件。 首先,我们来了解一下DWR的核心概念: 1. **DWR引擎(DWR Engine)**:这是DWR的核心组件...
**DWR.xml** 是DWR的配置文件,用于定制DWR的行为和设置。在这个文件中,你可以定义哪些Java类和方法可以被浏览器访问,设置安全性限制,以及配置转换器和过滤器等。例如,通过`<allow>`标签,你可以指定允许...
- **dwr.war**:这是一个DWR的部署文件,通常用于在Web服务器上快速部署DWR服务。开发者可以通过解压war文件查看源码,学习DWR的内部实现。 ### 实用案例 学习DWR时,实践是最好的老师。通过实际案例,可以理解DWR...
<servlet-class>uk.ltd.getahead.dwr.DWRServlet <param-name>debug <param-value>true <servlet-name>dwr-invoker <url-pattern>/dwr/* ``` - 这段配置指定了DWR servlet的名称、类以及调试模式,...
JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源...
最新dwr3.0的包,有需要的朋友就下载吧
1、 导入dwr.jar包 2、 在web.xml中配置dwr,如下: <!-- 配置DWR --> <servlet-name>dwr-invoker org.directwebremoting.servlet.DwrServlet <init-param> <param-name>debug</param-name> ...
部署DWR JAR文件通常涉及到将它们添加到Web应用的类路径中,配置DWR的`dwr.xml`配置文件,以及在客户端HTML页面中引入相应的JavaScript库。对于Spring框架的集成,还需要配置Spring的bean定义。 总的来说,DWR的...
dwr20.dtd约束文件。 <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd" >
dwr-1.1.3.jar及dwr.xml. dwr-1.1.3与dwr-2.0的dwr.xml略有区别: dwr-1.1.3 <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" ...
首先,DWR的核心是`dwr.xml`配置文件,它定义了哪些Java对象和方法可以被JavaScript调用。这个文件通常位于`WEB-INF`目录下,其中包含了对远程服务的定义,包括允许的类、方法和参数类型。例如: ```xml <!-- ...
在"**dwrTest.rar_dwr 3.jar_dwr.jar_dwr2.0.jar**"这个压缩包中,包含了DWR框架不同版本的jar文件,以及一个可能的示例项目,便于用户学习和测试DWR的功能。 **DWR 2.0 和 3.0 的主要区别:** 1. **性能提升**:...
取得dwr的dwr.jar包和其他dwr所需的其他jar包 web.xml dwr.xml 任何一个dwr.xml的文件都需要包含DWR DOCTYPE的声明行,。。 有几个术语有必要理解,参数叫做converted,远程Bean叫做created.如果远程Bean A有个方法A....
标题中的"dwr.jar"是DWR的主要库文件,包含了所有必要的Java类和接口,用于在服务器端实现DWR的功能。这个JAR文件通常会被部署到应用服务器的类路径中,以便服务端代码可以访问和使用DWR的API。 "engine.js"是DWR的...
dwr20.dtd
这个"**dwr.rar**"压缩包包含了DWR的核心组件,即**dwr.jar**文件,它是DWR运行所必需的。DWR的主要目的是简化AJAX(异步JavaScript和XML)开发,通过提供一种方式,使得前端JavaScript可以直接调用后端Java方法,...
DWR学习资料 :DWR 3.0 上传文件.txt DWR3.0反向Ajax示例.txt DWR3.0...多人聊天室.doc 反向Ajax技术实例.txt 基于DWR反向AJAX的Web监控系统.doc 深入学习DWR3.0.txt 实战dwr.doc 使用Jetty和DWR创建伸缩性Comet程序.txt
为了使用这些文件,你需要将它们部署到你的Web应用服务器中,通常将jar包放入WEB-INF/lib目录,而web.xml和dwr.xml则放入WEB-INF下。然后,在你的HTML或JavaScript代码中引入engine.js和util.js,通过它们提供的API...