2010.04.09(3)———dwr群聊
2010.04.09(3)———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>
java
package dwr;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<String> name_list = new ArrayList<String>(); 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(); //获得DWR上下文 ServerContext sctx = ServerContextFactory.get(sc); //获得当前浏览 某页面 已开启的所有脚本session //页面地址,以工程同目录真实地址为准,如:/部署名/pages/index.jsp Collection sessions = sctx.getScriptSessionsByPage("/chat/index.jsp"); 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("/chat/index.jsp"); 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("<table>"); for(String s : name_list){ userlist.append("<tr><td><font color='blue'>"+s+"</font></td></tr>"); } userlist.append("</table>"); util.setValue("userlist", userlist.toString()); } }
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> <create creator="new" javascript="Chat"> <param name="class" value="dwr.Chat" /> </create> </allow></dwr>
jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!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> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <center> <table width="600px" border="1"> <tr> <td colspan="3" align="center"> XXXXXX Chat </td> <td> User List </td> </tr> <tr> <td colspan="3" style="height: 300px"> <textarea rows="20" cols="60" readonly="readonly" id="showmessage" name="showmessage"></textarea> </td> <td style="height: 300px"valign="top"> <div id="userlist" style="height:310px;overflow : scroll;"></div> </td> </tr> <tr> <td colspan="3" align="center"> <span id="say_name" ></span> <textarea rows="3" cols="50" id="say_message" name="say_message" ></textarea><input type="button" value="say" id="say" /> </td> <td> 先录入你的昵称<br/> <input type="text" style="width: 125px" name="name" id="name" /> <input type="button" value="确定"/> </td> </tr> </table> </center> </body> <script type="text/javascript"> dwr.engine.setActiveReverseAjax(true); // 激活反转 重要 init(); function init(){ document.getElementById('say_message').disabled = true; document.getElementById('say').disabled = true; } function sayMessage(){ var message_content = DWRUtil.getValue('say_message'); var message_head = document.getElementById('say_name').innerHTML; Chat.sayMessage(message_head+message_content); document.getElementById('say_message').value = ''; } function register() { var name = DWRUtil.getValue("name"); Chat.addUser(name,callback); } function callback(str) { if(str != ''){ alert(str); }else{ document.getElementById('say_name').innerHTML = DWRUtil.getValue("name") + " 说:"; document.getElementById('say_message').disabled = false; document.getElementById('say').disabled = false; } } </script></html>
页:
[1]