小型聊天室--DWR实现服务器推技术

阅读更多

      开始我曾经用PHP做过一个聊天室,但是需要用JS不停的刷新去获取新的信息,这样让我感觉增加浏览器和服务器的负担,因为需要时时去请求!

      当我看到DWR2也可以实现推技术之后,我突然想尝试一下!

首先当官方上下载一个dwr的jar文件和commons-logging-1.1.1.jar

先从配置文件入手

web.xml




	
	ajaxDWR
	
		dwr-invoker
		
		
			org.directwebremoting.servlet.DwrServlet
		
		
			实现调试,在debug请设置为false
			debug
			true
		
		
			使用服务器推技术(反转AJAX)
			activeReverseAjaxEnabled
			true
		
		
			
				initApplicationScopeCreatorsAtStartup
			
			true
		
		
			maxWaitAfterWrite
			100
		
		4
	
	
		dwr-invoker
		/dwr/*
	

 dwr.xml




	
			
		
			
		
	
 

编写好配置文件之后,开始编写页面,我们可以选择html或者jsp都可以

index3.html



	
		index3.html

		
		
		
		
		
		
		

	

	
		
XXXXXX Chat User List
先录入你的昵称

 这个页面比较简陋,建议js写在下方,否则firefox会报错

 

Chat.java

package com.dwr.chat;

import java.util.ArrayList;
import java.util.Collection;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.directwebremoting.ServerContext;
import org.directwebremoting.ServerContextFactory;
import org.directwebremoting.proxy.dwr.Util;

public class Chat {
	static ArrayList name_list = new ArrayList();
	static StringBuffer show_message = new StringBuffer(); 

	public String addUser(String name,HttpServletRequest request) {
		System.out.println("list.size() = "+name_list.size());
		for (String s : name_list) {
			if (name == null || name.trim().equals(s)) {
				return "用户名已存在";
			} 
		}
		name_list.add(name.trim());
		ServletContext sc = request.getSession().getServletContext();
		ServerContext sctx = ServerContextFactory.get(sc);
		Collection sessions = sctx.getScriptSessionsByPage("/dwr2Demo/index3.html");
		Util util = new Util(sessions);
		show_message.append("\n欢迎"+name+"来到 XXX Chat");
		trimMessage();
		util.setValue("showmessage", show_message.toString());
		printUserList(util);
		return "";
	}
	
	public void sayMessage(String message,HttpServletRequest request){
		ServletContext sc = request.getSession().getServletContext();
		ServerContext sctx = ServerContextFactory.get(sc);
		Collection sessions = sctx.getScriptSessionsByPage("/dwr2Demo/index3.html");
		Util util = new Util(sessions);
		show_message.append("\n"+message);
		trimMessage();
		util.setValue("showmessage", show_message.toString());
		printUserList(util);
	}
	
	public void trimMessage(){
		if(show_message.length() > 2000){
			show_message.delete(0, ((show_message.length() - 2000)*2+2));
		}
	}
	
	public void printUserList(Util util){
		StringBuffer userlist = new StringBuffer();
		userlist.append("");
		for(String s : name_list){
			userlist.append("");
		}
		userlist.append("
"+s+"
"); util.setValue("userlist", userlist.toString()); } }

 

编写好这个之后,可以运行一下。

        经过测试,发现几个问题  浏览器我现在测试了三种发现三种都有自己的特性
        IE                 :比较正常,有时候会慢一些
        firefox          :每次刷新访问的时候服务器会出现一个异常
        google浏览器:在刷新的时候会无限等待,一直到接收到信息

 

 

 

 

 

你可能感兴趣的:(DWR,浏览器,Servlet,JavaScript,Firefox)