2010-07-28 19 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