我通过servlet查询数据库,结果存于collection集合里,怎么样对这个集合进行分页?要考虑到多人查询。
(不要对数据库分页,要保持数据一致)

解决方案 »

  1.   

    在数据库中将数据查出放入集合,然后将这个集合放到sessoin中,每次分页请求都将要显示的页码作为参数提交到servlet,然后servlet根据要显示的页码(当然还要根据每页现实的记录数量,这个可以在程序中定义一个静态变量)
    计算从集合的什么位置开始取数据、取多少条数据,然后将取到的数据显示页面上。
      

  2.   

    请问imA 将这个集合放到sessoin中,怎么放?还有sessoin能支持多大的集合,我的集合可能有几十万条数据,可以吗?
      

  3.   

    怎么放你也不知道??
    上网上查查,如何使用servlet吧,我不能什么事情都给你答案!
    至于你说的记录太大,这个只要你的内存够大就可以。
      

  4.   

    因为我的客户端是vb通过api系列函数HttpSendRequest,给servlet发送请求,servlet怎么知道我是要求的下一页,还是一个重新查询呢?或则是其他人的请求呢
      

  5.   

    我是刚学servlet,什么都不太懂啊
      

  6.   

    把数据放到session中不会相互影响的,因为session是针对每个用户单独存在的,所以相互之间不会影响。另外火龙果说的数据分页是指在数据库取数据的时候分页,就是一次不把所有的记录都取出来,而是需要哪页的数据就提取哪一页的数据。这样做的好处是大大节省了应用服务器的内存消耗,但是同时如果翻页动作比较频繁的话,也会带来频繁的数据库访问,增加应用服务器到数据库的网络流量。这样就看你怎么取舍了。另外还有一种方案就是缓存机制,就是把以前查询过的数据有选择性的在应用服务器的内存中保留副本,这样当翻页时就检查副本中是否有需要的数据,如果有就不用去数据库取了,如果没有再到数据库取。比如当用户要查看第二页的数据时候,而第二页的数据在应用服务器的内存中不存在相应的副本,那么这个时候就需要到数据库中查询,查询的同时把第三页、第四页、第五页的数据也一起查出来(因为看完第二页很有可能接下来查看第三页的树)保存到应用服务器的内存中,这样就减少了应用服务器到数据库的网络流量(因为不用每次都查询数据库,只有应用服务器上不存在需要的数据副本是才连接数据库查询)。但是这种方式需要你选择合适的数据预装载策略,同时也需要定期对短期也不会被用到的应用服务器上的数据副本进行清除。这样只要选择的策略得到,就会达到内存消耗和网络流量的一个均衡,但是需要做的工作比较多,工作量比较大,同时还要熟悉程序的应用状况,以此来调整你的预装载策略。
      

  7.   

    继续提问,现在我将一个ArrayList用Session.setAttribute()方法放到了session中,但是在servlet里取得的时候是Object型的,应该怎么样转成ArrayList呢?(答完散分)
      

  8.   

    ArrayList all = (ArrayList) session.getAttribute("user");
    前面加个强制转换就可以了