Struts 1.x Form Область действия, почему область запроса быстрее? - PullRequest
2 голосов
/ 23 июля 2011

Struts 1.x

Я всегда определял отображение действия формы Struts с помощью scope = "request", если оно не было принудительно введено в сеанс.Пример:

    <action
                path="/hello/my/oldfriend"
                type="com.imFine.HowAreYouAction"
                name="greetingActionForm"
                scope="request"
                validate="true"
                input="/the/front/door">
                <forward
                    name="success"
                    path="/go/get/drinks.do" />
            </action>

Если я преобразую это отображение действия из области запроса в область сеанса, то я почти всегда вижу снижение производительности.Какие дополнительные вызовы методов для сервлета Struts вызывают дополнительную нагрузку для bean-компонентов формы сессий?

1 Ответ

4 голосов
/ 24 июля 2011

Действительно, существует разница в том, как обрабатывается ActionForm, когда request ограничен или session ограничен.

Для области запроса, когда пользователь отправляет форму HTML, Struts создает экземпляр вашей ActionForm, привязывает к нему параметры запроса, а затем помещает его в область запроса с request.setAttribute(...) для представления, которое он использует. Как только запрос был обработан, ActionForm исчезает (объект для сбора мусора), потому что все данные запроса теперь находятся вне области. Каждый новый запрос вызывает создание, использование и уничтожение ActionForm.

Для области действия сеанса, когда пользователь отправляет форму, Struts пытается найти ActionForm внутри сеанса. Если он находит его, он использует его и привязывает к нему параметры запроса. Если он не находит его, он создает его и помещает в сеанс с session.setAttribute(...). После обработки запроса ActionForm остается в сеансе, и для дальнейших запросов он используется повторно.

Вышеуказанное не должно приводить к значительным потерям производительности.

Сеанс означает данные на сервере для каждого пользователя вашего приложения. Эти данные означают память. Больше пользователей означает больше памяти. Серверы обычно перемещают эти данные в постоянное хранилище, когда пользовательских данных больше, чем может обработать память. Данные сеанса сериализуются на диске, когда они не нужны, а затем десериализуются, когда это необходимо снова (база данных - это другой тип хранения данных).

Может быть, это то, что происходит. Недостаточно памяти, и сервер сохраняет / восстанавливает ее на диске, вызывая операции ввода-вывода, которые медленнее, чем доступ к памяти.

То, как Struts обрабатывает формы в зависимости от указанной области, может быть красной сельдью. Сначала проверьте вашу сессию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...