dwr多人聊天室实用技术详解(保证成功)
来源:互联网 发布:python正则表达式大全 编辑:程序博客网 时间:2024/06/05 17:52
<span style="font-family: SimHei; background-color: rgb(255, 255, 255);">好吧,正式文章第一篇,上一篇是当的 。呼啦啦 作为一个有拖延症的人 ,很想改正自己的缺点呐,那么就从现在开始吧q(≧▽≦q)!</span>
今天我们来说说dwr框架,理论的东西我也不懂,
其实在这里稍微说一下我的理解吧,我觉得dwr主要就是找构建ScripetSession和找ScriptSession的过程,找到了以后就可以通过ScriptBuffer构建回调函数,把scriptbuffer添加到session里就能执行啦,其中构建ScriptSession主要就是在你需要接受消息的页面加载完成时执行dwr.engine.setActiveReverseAjax(true);方法,找ScriptSession dwr给我们提供了两种方法,一种是通过ServerContextFactory得到ServerContext对象,然后通过ServerContext对象的getScriptSessionsByPage(currpage)方法获取scriptsession的集合,这是在dwr3出来之前的方法,现在一般很少用了,好像是因为有时候被返回的ServerContext是null值,我推荐的是第二种寻找session的方法,
<span style="white-space:pre"></span>Browser.withPage(page, new Runnable() {@Overridepublic void run() {ScriptSessions.addScript(sb); }});直接用Browser,都不用找了用ScriptSessions
实战开始吧!!!!!
1.配置dwr环境
框架神马的表示第一步当然是配环境啦,我写的方法是结合spring spring-mvc
web.xml配置如下
1.配置dwr基本的一些参数
<!-- dwr servlet --><servlet><display-name>DWR Servlet</display-name><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>logLevel</param-name><param-value>DEBUG</param-value></init-param><!-- dwr路径配置 --><!-- <init-param> <param-name>config</param-name> <param-value>/WEB-INF/dwr-user.xml</param-value> </init-param> --><!-- dwr的comet控制 --><init-param><param-name>pollAndCometEnabled</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>2.dwr.xml
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd"><dwr><allow></allow></dwr>这样dwr环境基本就搭好了,我们来进行第二部操作吧
2.构建实体类
1>构建了一个message类
public class Message {private String content;private Date sendDate;//省略getset方法
}2>在dwr.xml中配置后台的对象和前台对象关联
<span style="white-space:pre"></span><convert match="com.xl.domain.Message" converter="bean"><param name="include" value="content,sendDate" /></convert>
这样前台传过来的类后台也能识别啦
(这突然让我想到了ajax 也是直接传前台对象后台解析成类对象的 都不用配的只要名字一样就可以了,
但是骚年不要想太多啦 毕竟我们是前台调用的后台方法,
只是我有了个神奇的假设 能不能把这个写在接口里用ajax调呢???感觉是行的 我待会测测)
3>jsp代码 我没有用dwr的util,因为我习惯用jquery啦
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Chat</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><script type="text/javascript"<span style="white-space:pre"></span>src="${ctx }/static/js/jquery/jquery-1.11.3.min.js"></script><script type="text/javascript"<span style="white-space:pre"></span>src="${ctx }/static/js/jquery/jquery-migrate-1.2.1.min.js"></script><script type="text/javascript" src="${ctx}/dwr/engine.js"></script><script type="text/javascript" src="${ctx}/dwr/interface/ChatService.js"></script><script type="text/javascript">function send() {var time = new Date();var content = $("#content").val();var name = $("#userName").val();var info = encodeURI(encodeURI(name + " say:\n" + content));var msg = {"content" : info,"sendDate" : time};$("#content").val('');if (!!content) {ChatService.sendMsg(msg);} else {alert("发送的内容不能为空!");}}function showMessage(data) {var message = decodeURI(decodeURI(data.content));var text = $('#info').val();if (!!text) {$('#info').val(text + "\n" + data.sendDate + " " + message);} else {$('#info').val(data.sendDate + " " + message);}}$(function() {<span style="color:#cc0000;background-color: rgb(255, 255, 102);">d</span><span style="color:#ff0000;background-color: rgb(255, 255, 102);">wr.engine.setActiveReverseAjax(true);</span>//注册ScriptSessiondwr.engine.setNotifyServerOnPageUnload(true);//在关闭页面时注销ScriptSession});</script></head><body><textarea rows="20" cols="60" id="info" readonly="readonly"></textarea><hr />昵称:<input type="text" id="userName" /><br /> 消息:<textarea rows="5" cols="30" id="content"></textarea><input type="button" value=" Send " onclick="send()"style="height: 85px; width: 85px;" /></body></html>${ctx}存的是我的工程名,这个不用管 地址导成你们自己的就可以啦
注意
<span style="color:#cc0000;background-color: rgb(255, 255, 102);">d</span><span style="color:#ff0000;background-color: rgb(255, 255, 102);">wr.engine.setActiveReverseAjax(true); </span>注意 如果你这个页面要接收消息的话一定要加 不然扫描不到scriptsession自然就实现不了推送啦
4>后台代码
其实很简单 无非就是找到所有的scriptsession 再给她们都调用他们页面的回调函数就行了
@Servicepublic class ChatService {public void sendMsg(Message msg){String page = ServerContextFactory.get().getContextPath()+"/chat.do";ScriptBuffer sb = new ScriptBuffer();String s = RandomUtil.dateFormate(msg.getSendDate(), "yyyy-MM-dd HH:mm:ss");// 执行setMessage方法sb.appendScript("showMessage({content: '").appendScript(msg.getContent()).appendScript("', sendDate: '").appendScript(s).appendScript("'})");Browser.withPage(page, new Runnable() {@Overridepublic void run() {ScriptSessions.addScript(sb); }});}}
好吧 就这么简简单单就o了
- dwr多人聊天室实用技术详解(保证成功)
- Spring整合DWR comet 实现无刷新 多人聊天室
- Spring整合DWR comet 实现无刷新 多人聊天室
- Spring整合DWR comet 实现无刷新 多人聊天室
- Spring整合DWR comet 实现无刷新 多人聊天室
- Spring整合DWR comet 实现无刷新 多人聊天室
- Spring整合DWR comet 实现无刷新 多人聊天室
- Spring整合DWR comet 实现无刷新 多人聊天室
- Spring整合DWR comet 实现无刷新 多人聊天室
- Spring整合DWR comet 实现无刷新 多人聊天室
- Spring整合DWR comet 实现无刷新 多人聊天室
- 经典实用技术详解-VPN(二)
- 经典实用技术详解-VPN(三)
- 经典实用技术详解-VPN(四)
- dwr comet整合spring 实现了无刷新,多人网页版聊天室
- dwr实现聊天室功能
- 经典实用技术详解-VPN(一) (1)
- 经典实用技术详解-VPN(一)
- bnu 51644 Whalyzh's Problem(网络流,最大密度图) (北师16校赛)
- 利用Python下的draw_net.py画网络结构图
- RecyclerView可以在xml文件中配置的特别属性
- log4net记录日志,在IIS发布后不记录日志问题解决方案
- Dynamic clock
- dwr多人聊天室实用技术详解(保证成功)
- poj 1066 Treasure Hunt (线段交)
- android 控件 下拉刷新 JellyRefreshLayout
- JMS 都有哪些消息体
- Linux内核学习总结
- ros中使用串口
- Excel Sheet Column Number
- Cookie/Session机制详解
- 设置源