Какова полезность безгражданства в JSF?

Согласно этот блог JSF становится без гражданства. Разве не все дело в использовании JSF заключается в том, что он экономит и восстанавливает состояние. В чем смысл JSF стать апатридом? Можете ли вы привести пример, где это может быть полезно.

Ответ 1

Прежде всего, я хотел бы уточнить, что JSF не совсем "идет без апатридов" в целом. JSF просто добавляет новую функцию, позволяющую разработчикам создавать запросы и формы без гражданства по требованию.

Сохранение состояния особенно полезно в динамически управляемых формах, например. условно обработанные ajax части. Он запоминает состояние формы через postbacks на основе ajax. Другими словами, это те формы, в которых вам абсолютно необходим управляемый вид bean, а не управляемый запрос bean. В случае статических форм, привязанных к области запроса bean, состояние может быть легко воссоздано по запросу на основе файла представления и, следовательно, необязательно должно быть сохранено.

Сохранение состояния имеет в случае управления сохранением состояния на стороне сервера, но стоимость с точки зрения памяти сервера и создания сеанса. Кроме того, он имеет дополнительный недостаток, заключающийся в том, что ViewExpiredException будет возникать во время обратной передачи, когда сеанс истек. Все это можно решить, установив управление сохранением состояния на клиентскую сторону. Но это, в свою очередь, связано с пропускной способностью сети и более низкой производительностью из-за сериализации.

Например, если крупные веб-сайты охватывают раздел "общедоступный" и "ограниченный", вы хотите отложить создание сеанса до тех пор, пока пользователь не выполнит вход в систему. Однако, если у вас есть форма входа в JSF для публики часть, то сеанс все равно будет создан путем простого доступа к этой странице. Это ненужная стоимость, если форма в основном не имеет динамического состояния сама по себе и привязана к охвату запроса bean.

Правда, эта стоимость ничтожна, если у вас есть современное оборудование, но оно не является незначительным, если у вас относительно много посетителей и/или относительно плохое аппаратное обеспечение. В этом случае измерение - это знание. Кроме того, не всегда можно перейти полностью без гражданства, вы потеряете выгоду и опыт динамически управляемых представлений/форм. Тем не менее, теоретически вы можете поддерживать состояние по принципу запроса, используя скрытые поля ввода и/или параметры пользовательского запроса.

Следует отметить, что отсутствие безгражданства имеет дополнительный недостаток, что теоретически более легко выполнить атаку CSRF, если есть открытое отверстие XSS. К счастью, с JSF2/Facelets уже очень сложно иметь отверстие XSS. Единственный способ получить это - использовать <h:outputText escape="false"> для повторного отображения данных, управляемых пользователем.

См. также:

Ответ 2

Точка только для поддержания состояния, когда есть реальное состояние для поддержания.

Одна из больших проблем с JSF масштабируется.

У вас в основном было два варианта с JSF:

  • Состояние хранилища на сервере - профи: более быстрое время ответа; минусы: вам нужны загрузочные загрузки памяти, чтобы обрабатывать более 2-300 пользователей "просто просматривая", например, прежде чем они войдут в систему или добавят что-нибудь в корзину

  • Состояние хранилища на клиенте - профи: удаляет ограничение памяти; минус: увеличивает пропускную способность сервера, поскольку дерево компонентов должно быть отправлено клиенту каждый раз

Предполагается, что безстоящий должен гарантировать, что JSF может использоваться для эффективного обслуживания контента, в то время как у пользователя нет состояния, требуемого для поддержания.

Существуют дополнительные уточнения, например, позволяющие повторно использовать дерево компонентов, если это имеет смысл, но идея заключается в том, чтобы лучше масштабировать приложение.