5

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

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

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

 $(document).ready(function() {

     var updateInterval = setInterval(function() {

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

     },1000);

 });   

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

谁能给我一些在 servlets/jsp 中使用彗星或长轮询获取数据库更新的例子?我正在使用 Tomcat 作为服务器。

4

1 回答 1

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 脚本会话,您也可以使系统更加高效。

于 2013-11-11T06:00:31.437 回答