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

use*_*215 5 java jsp servlets comet long-polling

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

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

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

 $(document).ready(function() {

     var updateInterval = setInterval(function() {

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

     },1000);

 });   
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以给我一些使用servlet/jsp中的comet或long轮询获取数据库更新的示例吗?我正在使用Tomcat作为服务器.

con*_*ner 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);
Run Code Online (Sandbox Code Playgroud)

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

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