Действительно, существует разница в том, как обрабатывается ActionForm, когда request
ограничен или session
ограничен.
Для области запроса, когда пользователь отправляет форму HTML, Struts создает экземпляр вашей ActionForm, привязывает к нему параметры запроса, а затем помещает его в область запроса с request.setAttribute(...)
для представления, которое он использует. Как только запрос был обработан, ActionForm исчезает (объект для сбора мусора), потому что все данные запроса теперь находятся вне области. Каждый новый запрос вызывает создание, использование и уничтожение ActionForm.
Для области действия сеанса, когда пользователь отправляет форму, Struts пытается найти ActionForm внутри сеанса. Если он находит его, он использует его и привязывает к нему параметры запроса. Если он не находит его, он создает его и помещает в сеанс с session.setAttribute(...)
. После обработки запроса ActionForm остается в сеансе, и для дальнейших запросов он используется повторно.
Вышеуказанное не должно приводить к значительным потерям производительности.
Сеанс означает данные на сервере для каждого пользователя вашего приложения. Эти данные означают память. Больше пользователей означает больше памяти. Серверы обычно перемещают эти данные в постоянное хранилище, когда пользовательских данных больше, чем может обработать память. Данные сеанса сериализуются на диске, когда они не нужны, а затем десериализуются, когда это необходимо снова (база данных - это другой тип хранения данных).
Может быть, это то, что происходит. Недостаточно памяти, и сервер сохраняет / восстанавливает ее на диске, вызывая операции ввода-вывода, которые медленнее, чем доступ к памяти.
То, как Struts обрабатывает формы в зависимости от указанной области, может быть красной сельдью. Сначала проверьте вашу сессию.