javax.faces.STATE_SAVING_METHOD определяет где будет храниться состояние представления между запросами. Собственно вариантов не много: либо на стороне сервера (server), либо на стороне клиента (client).
По умолчанию используется значение server, при этом состояние сохраняется в сессии сервлета. При значении client, состояние будет сохраняться прямо в HTML код страницы. С точки зрения реализации, состояние будет сохраняться в скрытую переменную com.sun.faces.VIEW в кодировке Base64. Сохранение происходит с помощью сериализации и сериализуемый объект будет экземпляром класса com.sun.faces.util.TreeStructure.
client vs server
Сохранение состояния на стороне клиента позволяет избавиться от лишних запросов к серверу, например, от таких как повторная отправка формы. Объекты в сессии сервлета обновляются при каждой пересылке напрямую, в то время как объекты на стороне клиента, должны быть де-сериализованны при каждой пересылке. При использовании clien-side метода, нет проблем с тайм-аутом сессии, что является несомненным плюсом. Масштабируемость также является одним из преимуществ метода client-side, рост числа клиентов не требует увеличения ресурсов сервера, однако, при использовании этого метода вся нагрузка ложится на сеть. При использования метода server-side, нагрузка на сервер возрастает с увеличением числа клиентов.
В некоторых случаях, метод client-side лучше не применять, к таким случаям можно отнести ситуации когда размер состояния очень большой. Например, если представление содержит какой нибудь большой отчет с большим количеством данных. Также следует помнить о том, что при использовании метода client-side, состояние будет храниться непосредственно в коде HTML, что не всегда допустимо по соображением безопасности, но в данной ситуации всегда можно применить шифрование.
СуммируемНеобходимым условием использования метода server-side является использование cookies на стороне клиента.
Для начала лучше использовать метод server-side, с ним меньше возни и проблем. Но в дальнейшем, когда число пользователей возрастет, можно подумать о переходе к использованию метода client-side, предварительно изучив все нюансы и более подробно разобравшись в теме.
На всякий случай приведу вариант объявления:
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
Комментариев нет:
Отправить комментарий