Вопрос об использовании памяти для отображения: тег jstl таблицы - PullRequest
3 голосов
/ 28 июля 2010

Я написал свой JSP, используя <display:table> для отображения результатов поиска. <display:table> требует, чтобы список javabean передавался как аргумент. В настоящее время контроллер создает список, а затем его отображает jsp.

Меня беспокоит то, что произойдет, если 1000 пользователей будут выполнять поиск одновременно. Это означает, что все результаты должны быть загружены в память в виде различных списков javabean для отображения <display:table>. Система может произойти сбой из-за нехватки памяти. Есть ли хорошие стратегии для предотвращения нехватки памяти в системе? Есть ли способ на уровне приложения ограничить количество пользователей для загрузки приложения? Означает ли это, что использование <display:table> является плохой практикой программирования, поскольку все записи должны загружаться в память одновременно? Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 28 июля 2010

Это очень серьезная проблема. Вы не должны излишне выделять память. Displaytag, к сожалению, не поддерживает разбиение на страницы на уровне базы данных. Сначала все должно быть загружено в память Java. Очевидно, что наиболее эффективным способом использования памяти является сохранение только данных в памяти, которые конечный пользователь увидит, и отправка нового HTTP-запроса на сервер для получения именно этих новых строк из БД при каждом нажатии кнопки.

Никаких других тегов нумерации страниц на основе JSP, которые приходят на ум. Если бы вы использовали JSF, я бы порекомендовал PrimeFaces '<p:dataTable dynamic="true"> для этого. Вам все еще нужно написать код, который извлекает именно те строки из БД. Но это не так сложно, когда вы используете Hibernate и / или JPA.

В "простой ванили" JSP / JSTL вам нужно проделать немного больше работы. По сути, вам нужно предоставить несколько кнопок, которые будут изменять значение firstrow и вызывать действие для соответствующего извлечения данных из БД. Ранее я подробно на это отвечал в этой теме: ResultSet to Pagination .

1 голос
/ 05 марта 2013

Хотя это старый пост, только для записи, тег Display поддерживает внешнюю нумерацию страниц.

Дополнительная информация здесь: http://displaytag.sourceforge.net/11/tut_externalSortAndPage.html

...