使用DWR的推送实现一个简单的聊天室
web.xml配置如下
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>TRUE</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
dwr.xml配置一个简单的对象
<dwr>
<allow>
<create creator="new" javascript="MessagePush">
<param name="class" value="com.kenshiro.MessagePush"></param>
</create>
</allow>
</dwr>
Java类com.kenshiro.MessagePush对应javascript对象名为MessagePush
MessagePush.java如下
public class MessagePush {
public void send(String msg){
WebContext webContext = WebContextFactory.get();
String ip = webContext.getHttpServletRequest().getRemoteAddr().toString();//获取客户端IP
String page = "/DWR/index.html" ; //DWR为项目名称,页面为index.html
Collection<ScriptSession> sessions = webContext.getScriptSessionsByPage(page);
Util util = new Util(sessions);
util.addFunctionCall("dwrtest", ip + ": " + msg); //dwrtest为javascript函数
}
}
index.html 页面代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/interface/MessagePush.js"></script>
<script type="text/javascript">
function dwrtest(data){
document.getElementById("area").innerHTML = document.getElementById("area").innerHTML + "\n" +data;
}
function send(msg){
if(event.keyCode == 13){
MessagePush.send(msg)
}
}
</script>
</head>
<body onload="dwr.engine.setActiveReverseAjax(true);">
<textarea style="width: 800px; height: 600px;" id="area">
</textarea>
<br />
<input type="text" style="width: 800px;" id="in" onkeyup="send(this.value)" />
</body>
</html>