2010-07-28 64 views
3

我已经使用<display:table>编写了我的jsp来显示搜索结果。 <display:table>需要一个javabean列表作为参数传入。目前一个控制器会建立这个列表,然后jsp显示它。关于使用显示的内存使用问题:表jstl标记

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

+0

据我所知,最新版本的JSTL为1.2:http://download-llnw.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/ index.html “data”标签的命名空间是什么? – McDowell 2010-07-28 07:46:38

+0

@McDowell,我正在使用'displaytag-1.1.jar','<%@ taglib prefix =“display”uri =“http://displaytag.sf.net”%>' – Ken 2010-07-28 08:33:25

+0

此问题不是特定于JSP和DisplayTag,它是一个更为普遍的Web开发 – skaffman 2010-07-28 08:48:00

回答

4

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

没有其他基于JSP的分页标签,这让人想起。如果您使用的是JSF,我会为此推荐。您仍然必须编写正在从数据库中检索特定行的代码。但是当你使用Hibernate和/或JPA时,这并不难。

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

+0

酷!您在其他帖子中的详细示例非常有用。结合AJAX的JSF技术听起来非常有趣和有用。当我有时间时,我应该多阅读一些内容。谢谢你,巴洛斯! – Ken 2010-07-28 13:58:20

+0

不客气。 JSF绝对很酷(特别是当前的2.0版本)。但是我建议在掌握好JSP/Servlet之前不要学习它。否则很难理解JSF正在做什么“隐藏”(因为它运行在Servlet API之上)。首先学习“简单”的JSP/Servlet和“plain/homegrown”MVC,然后您将更好地理解为什么JSF在那里以及它在做什么。 – BalusC 2010-07-28 14:02:54

+0

好的。我会照办的。再次感谢。 – Ken 2010-07-28 14:12:53