求一个关于数据库推送技术的例子。

tanshulin521 2012-08-05 09:22:45
如题:请发送到:476611186@qq.com 发完即给分。谢谢啊 。 javaweb工程。
...全文
488 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
XPS9100 2013-09-19
  • 打赏
  • 举报
回复
LZ实现了吗?能否共享下源码...546454088@qq.com
MiceRice 2012-08-14
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
关键在于数据库有没有这样的功能.比如触发器,一旦有所改变就调用java方法返回改变的数据
[/Quote]

如我6楼所说:Oracle 是有的,称为"Database Change Notification",其它大多没有,参见:

http://www.builder.com.cn/2007/1022/571942.shtml
tanshulin521 2012-08-14
  • 打赏
  • 举报
回复
关键在于数据库有没有这样的功能.比如触发器,一旦有所改变就调用java方法返回改变的数据
北吹 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

可以通过spring的AOP实现对DAO层的监控,然后通过DWR的后台推送实现你的功能.
[/Quote]

我和你想到一起去了,不过这样做只能监听到程序对数据库的修改,如果是直接修改数据库,就没办法实现了。
so_and_so 2012-08-06
  • 打赏
  • 举报
回复
可以通过spring的AOP实现对DAO层的监控,然后通过DWR的后台推送实现你的功能.
MiceRice 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
为什么是消耗服务器端的资源呢,页面里面定时的话,消耗的是客户端浏览器的资源吧,就是定时的话会经常发送请求,这个是缺陷。
[/Quote]

你没看清楼主和我说的意思。

楼主要求:“而不用客户端发请求”
我的说法是:“基于长连接”

为什么“消耗服务器端资源”是因为“一个长连接就要消耗一条线程”。
balabala_sean 2012-08-06
  • 打赏
  • 举报
回复
下面的这个少个注释:

/*当body加载时候,定期执行ajaxAccess()函数,6000指的是6秒*/
function run(){
window.setInterval(ajaxAccess(),6000);
}
balabala_sean 2012-08-06
  • 打赏
  • 举报
回复
大致的思路是这样的,你尝试着写一下,我写的草稿没运行。

<script type="text/javascript">
function run(){
window.setInterval(ajaxAccess(),6000);
}

/*创建XMLHttpRequest的对象*/
var xmlhttp;
function ajaxAccess(){
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else if(window.ActiveXObject){
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

/*执行回调函数*/
var responseValue;
xmlhttp.onreadystatechange = function(){
if(xmlhttp.status==200&&xmlhttp.readyState==4){
responseValue = xmlhttp.responseText();
if(responseValue!=null){
/*有内容变化时,给页面一个反馈*/
document.getElementById("testDiv").innerHTML = responseValue;
}
}
}

/*提交到一个action上去,action去访问数据库,加个判断,有内容就返回*/
var url = "";
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
</script>
<body onload="run()">
<div id="testDiv">数据库发生变化的话,把内容显示到这里</div>
</body>
逆天小北鼻 2012-08-06
  • 打赏
  • 举报
回复
问题十分的不清晰
balabala_sean 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
这个比较难,两个问题:
1、数据库数据发生变化后,如何通知应用系统;绝大多数数据库无此功能,基本上要靠程序去定时轮询;目前已知的,可以由数据库主动notify应用系统数据变化的,是Oracle;
2、应用系统知道数据变化后,如何将数据推送给浏览器;这个要么基于长连接(不见得是Ajax,但很消耗服务器端资源,一个长连接就要消耗一条线程);要么就是浏览器端定时请求。

你能理解上面两个问题么?……
[/Quote]

为什么是消耗服务器端的资源呢,页面里面定时的话,消耗的是客户端浏览器的资源吧,就是定时的话会经常发送请求,这个是缺陷。
balabala_sean 2012-08-06
  • 打赏
  • 举报
回复
在页面写一个定时器不就完了么:

function run(){
window.setInterval(ajaxfunction(),60000);
}

function ajaxfunction(){
/*这里去访问servlet或者action的与Dao交互的方法*/
}

页面加载的时候<body onload="run()">
MiceRice 2012-08-06
  • 打赏
  • 举报
回复
这个比较难,两个问题:
1、数据库数据发生变化后,如何通知应用系统;绝大多数数据库无此功能,基本上要靠程序去定时轮询;目前已知的,可以由数据库主动notify应用系统数据变化的,是Oracle;
2、应用系统知道数据变化后,如何将数据推送给浏览器;这个要么基于长连接(不见得是Ajax,但很消耗服务器端资源,一个长连接就要消耗一条线程);要么就是浏览器端定时请求。

你能理解上面两个问题么?能的话可以继续探讨。
tanshulin521 2012-08-06
  • 打赏
  • 举报
回复
ajax的长连接可是实现,可是具体怎么写我不知道....求源码!
tanshulin521 2012-08-06
  • 打赏
  • 举报
回复
问题是:如果数据库中的数据发生了变化,比如新增、删除、修改那么在页面会显示出改变了什么,而不用客户端发请求。上网收索了 ajax是建立长连接实现的,只是我不知道具体是怎么实现的?
tanshulin521 2012-08-06
  • 打赏
  • 举报
回复
请问怎么实现?有源码吗?
Angelababy_ 2012-08-06
  • 打赏
  • 举报
回复
你的意思是数据库中增加数据时 页面自动提示的功能么?

如果是这样的话,ajax就可以实现。
cxw3152 2012-08-06
  • 打赏
  • 举报
回复
什么问题下。。还是不明白。 。
brightyq 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
引用 13 楼 的回复:

可以通过spring的AOP实现对DAO层的监控,然后通过DWR的后台推送实现你的功能.


我和你想到一起去了,不过这样做只能监听到程序对数据库的修改,如果是直接修改数据库,就没办法实现了。
[/Quote]
楼主要的好智能。
如果直接操作数据库,那就查看数据库操作日志吧,从中提取操作数据展示在页面上。不过也蛮麻烦的。
我只是一粒沙 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

引用 13 楼 的回复:

可以通过spring的AOP实现对DAO层的监控,然后通过DWR的后台推送实现你的功能.


我和你想到一起去了,不过这样做只能监听到程序对数据库的修改,如果是直接修改数据库,就没办法实现了。
[/Quote]那就只能是 客户端定时发送请求了,目前能用的,这个比较实用
MiceRice 2012-08-06
  • 打赏
  • 举报
回复
问题十分的不清晰。。。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧