使用servlet或jsp获取数据库更新

时间:2013-11-11 05:51:53

标签: java jsp servlets comet long-polling

我想要的是获取数据库更新。

即如果数据库发生任何更改或插入新记录,则应通知用户。

直到知道我实现的是使用jQuery,如下所示

 $(document).ready(function() {

     var updateInterval = setInterval(function() {

         $('#chat').load('Db.jsp?elect=<%=emesg%>');

     },1000);

 });   

它对我来说很好,但我的老师告诉我,推荐使用彗星或长轮询技术不是一个好方法。

任何人都可以给我一些使用彗星或长轮询获取数据库更新的示例 在servlets / jsp中?我正在使用Tomcat作为服务器。

1 个答案:

答案 0 :(得分:2)

因为我不知道你的确切环境,所以只是在黑暗中拍摄...你可以让数据库触发器在每次提交一行时触发对servlet的调用,然后运行一些看起来像的代码如下:

获取我们要更新的页面处于活动状态的脚本会话。这消除了检查站点上运行的每个反向ajax脚本会话的需要。一旦我们有了脚本会话,我们就可以使用第二个代码块来获取一些数据并在客户端更新表。第二个代码部分所做的就是将javascript发送到客户端,以通过打开的反向ajax连接执行。

String page = ServerContextFactory.get().getContextPath() + "/reverseajax/clock.html";
        Browser.withPage(page, new Runnable() {
            public void run() {
                Util.setValue("clockDisplay", output);
            }
        });



  // Creates a new Person bean.
                Person person = new Person(true);
                // Creates a multi-dimensional array, containing a row and the rows column data.
                String[][] data = {
                    {person.getId(), person.getName(), person.getAddress(), person.getAge()+"", person.isSuperhero()+""}
                };
                // Call DWR's util which adds rows into a table.  peopleTable is the id of the tbody and 
                // data conta

ins the row/column data.  
                Util.addRows("peopleTable", data);

请注意,上述两段代码都是直接从文档示例@ http://directwebremoting.org/dwr-demo/中提取的。这些只是反向ajax如何将数据发送到客户端的简单示例,但您的确切情况似乎更多地取决于您收到通知的方式,而不是更新客户端屏幕的方式。

如果没有对java代码的某种类型的数据库通知,我认为你必须以设定的间隔轮询系统。即使在轮询时,也可以通过在轮询数据库获取信息之前验证页面是否存在活动的反向ajax脚本会话来使系统更高效。