Согласно этот блог 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">
для повторного отображения данных, управляемых пользователем.
См. также:
- Почему JSF сохраняет состояние компонентов пользовательского интерфейса на сервере?
- Я подвержен риску атак CSRF в форме POST, которая не требует, чтобы пользователь вошел в систему?
- Предотвращение атак CSRF, XSS и SQL в JSF
- Как разные фазы жизненного цикла JSF ведут себя в представлении без состояния, содержащем форму
Ответ 2
Точка только для поддержания состояния, когда есть реальное состояние для поддержания.
Одна из больших проблем с JSF масштабируется.
У вас в основном было два варианта с JSF:
-
Состояние хранилища на сервере - профи: более быстрое время ответа; минусы: вам нужны загрузочные загрузки памяти, чтобы обрабатывать более 2-300 пользователей "просто просматривая", например, прежде чем они войдут в систему или добавят что-нибудь в корзину
-
Состояние хранилища на клиенте - профи: удаляет ограничение памяти; минус: увеличивает пропускную способность сервера, поскольку дерево компонентов должно быть отправлено клиенту каждый раз
Предполагается, что безстоящий должен гарантировать, что JSF может использоваться для эффективного обслуживания контента, в то время как у пользователя нет состояния, требуемого для поддержания.
Существуют дополнительные уточнения, например, позволяющие повторно использовать дерево компонентов, если это имеет смысл, но идея заключается в том, чтобы лучше масштабировать приложение.