3

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

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

4

2 回答 2

4

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

没有其他基于 JSP 的分页标记可以做到这一点。如果您使用的是 JSF,我会为此推荐PrimeFaces'<p:dataTable dynamic="true">。您仍然必须编写从数据库中准确检索特定行的代码。但是,当您使用 Hibernate 和/或 JPA 时,这并不难。

在“plain vanilla”JSP/JSTL 中,您必须做更多的工作。基本上,您需要提供一堆按钮,这些按钮将修改值firstrow并调用操作以相应地从数据库中检索数据。我之前在这个主题中已经详细回答过这个问题:ResultSet to Pagination

于 2010-07-28T12:01:09.960 回答
1

虽然是老帖子,但仅作记录,Display标签支持外部分页。

更多信息在这里:http ://displaytag.sourceforge.net/11/tut_externalSortAndPage.html

于 2013-03-05T13:14:09.847 回答