dwr3.0 中采用的是线程阻塞的方式实现的。下面的是其实现方式。
首先加入dwr3.0 的支持包。
后台模拟聊天的Message 类 Message.java
package com.fendou;
public class Message {
public Message(String newtext) { id = System.currentTimeMillis(); text = newtext; if (text.length() > 256) text = text.substring(0, 256); }
public long getId() { return id; }
public String getText() { return text; }
private long id; private String text; }
后台模拟聊天实现类 JavaChat.java
package com.fendou;
import java.util.LinkedList;
import org.directwebremoting.Browser; import org.directwebremoting.ScriptSessions; import org.directwebremoting.ServerContextFactory; import org.directwebremoting.ui.dwr.Util;
public class JavaChat {
// 模拟添加消息的方法 public void addMessage(String text) { if (text != null && text.trim().length() > 0) { messages.addFirst(new Message(text)); while (messages.size() > 10) { messages.removeLast(); } } Util.setValue("text", "");
String page = ServerContextFactory.get().getContextPath() + "/test.jsp"; // 通过Brower 对象来操作
Browser.withPage(page, new Runnable() { public void run() {
Util.removeAllOptions("chatlog"); Util.addOptions("chatlog", messages, "text"); } }); }
private final LinkedList<Message> messages = new LinkedList<Message>(); }
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>
<servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <!-- 配置成反转的方式,一定要配置 --> <init-param> <param-name>activeReverseAjaxEnabled</param-name> <param-value>true</param-value> </init-param>
<init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping>
</web-app>
dwr.xml 文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd ">
<dwr> <allow> <create creator="new" scope="application"> <param name="class" value="com.fendou.JavaChat" /> </create> <convert converter="bean" match="com.fendou.Message" /> </allow> </dwr>
test.jsp 文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd "> <html xmlns="http://www.w3.org/1999/xhtml "> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>DWR Thin Chat Version 2.0</title> <script type='text/javascript' src='/ReverseAjax/dwr/interface/JavaChat.js'></script> <script type='text/javascript' src='/ReverseAjax/dwr/engine.js'></script> <script type='text/javascript' src='/ReverseAjax/dwr/util.js'></script>
<script type="text/javascript"> function sendMessage() { JavaChat.addMessage(dwr.util.getValue("text")); } </script>
</head>
<body οnlοad="dwr.engine.setActiveReverseAjax(true); "> <h1> Java Chat </h1> <div id="tabContents">
<div id="demoDiv"> <p> Your Message: <input id="text" οnkeypress="dwr.util.onReturn(event, sendMessage)" /> <input type="button" value="Send" οnclick="sendMessage()" /> </p> <hr /> <ul id="chatlog" style="list-style-type: none;"> </ul> </div> </div> </body> </html>