使用display:table jstl标记的内存使用问题

时间:2010-07-28 07:09:55

标签: java jsp memory displaytag

我使用<display:table>编写了我的jsp来显示搜索结果。 <display:table>需要将javabean列表作为参数传入。目前,控制器将构建列表,然后jsp显示它。

我担心的是,如果1000个用户一次执行搜索会发生什么。这意味着所有结果都需要作为<display:table>显示的不同javabean列表加载到内存中。由于内存不足,系统可能会崩溃。是否有良好的策略来防止系统内存不足?应用程序级别是否有办法限制加载应用程序的用户数量?这是否意味着使用<display:table>是一个糟糕的编程习惯,因为所有记录必须立即加载到内存中?提前谢谢。

2 个答案:

答案 0 :(得分:4)

这是一个非常有效的问题。你不应该不必要地分配内存。遗憾的是,Displaytag不支持数据库级别的分页。必须首先将所有内容加载到Java的内存中。最节省内存的方法显然是将存储在最终用户将要查看的内存中,并向服务器发出新的HTTP请求,以便在每次单击按钮时从数据库中检索这些新行

没有其他基于JSP的分页标记可以实现这一点。如果您使用的是JSF,我会建议PrimeFaces' <p:dataTable dynamic="true">。您仍然必须编写正在从DB中检索特定行的代码。但是当你使用Hibernate和/或JPA时,这并不难。

在“普通香草”JSP / JSTL中你必须做更多的工作。基本上,您需要提供一组按钮来修改firstrow的值并调用操作以相应地从DB检索数据。我在本主题之前已详细解答过这个问题:ResultSet to Pagination

答案 1 :(得分:1)

虽然这是一个旧帖子,但只是为了记录,Display标签支持外部分页。

此处有更多信息:http://displaytag.sourceforge.net/11/tut_externalSortAndPage.html