gpt4 book ai didi

jsf - JSF 中无状态的用处是什么?

转载 作者:行者123 更新时间:2023-12-03 14:40:10 27 4
gpt4 key购买 nike

根据this blog JSF 正在走向无状态。使用 JSF 的全部意义不在于它使保存和恢复状态成为一件苦差事。 JSF 成为无状态的有什么意义?您能否提供一个有用的示例。

最佳答案

首先,我想澄清 JSF 本身并不是完全“无状态”。 JSF 只是添加了一项新功能,使开发人员能够按需创建无状态 View /表单。
状态保存在动态操作的表单中特别有用,例如有条件的 ajax 渲染部分。它在基于 ajax 的回发中记住表单的状态。换句话说,在这些表单中,您绝对需要一个 View 范围的托管 bean,而不是请求范围的托管 bean。在静态表单绑定(bind)到请求范围 bean 的情况下,可以根据 View 文件在每个请求的基础上轻松地重新创建状态,因此不一定需要保存。
在服务器端状态保存管理的情况下,状态保存具有服务器内存和 session 创建方面的成本。此外,它还有一个额外的缺点,即 ViewExpiredException将在 session 过期时的回发期间发生。所有这些都可以通过将状态保存管理设置为客户端来解决。但这反过来又会在网络带宽和由于序列化导致的性能下降方面付出代价。
例如,在大型网站覆盖“公共(public)”和“受限”部分的情况下,您希望将 session 创建推迟到用户实际登录。但是,如果您在公共(public)部分有一个 JSF 登录表单,那么 session 仍将通过访问该页面来创建。如果表单本身基本上没有动态状态并且绑定(bind)到请求范围的 bean,那么这是不必要的成本。
诚然,如果您拥有最先进的硬件,这个成本可以忽略不计,但如果您有相对较多的访问者和/或相对较差的硬件,它就不可忽略。在这种情况下,测量就是知道。此外,完全无状态并不总是可能的,您将失去动态操作 View /表单的好处和体验。但是,理论上您可以通过摆弄隐藏的输入字段和/或自定义请求参数来维护每个请求的状态。
应该注意的是,无状态还有一个额外的缺点,即如果存在开放的 XSS 漏洞,理论上更容易执行 CSRF 攻击。幸运的是,使用 JSF2/Facelets 已经很难有 XSS 漏洞了。获得它的唯一方法是使用 <h:outputText escape="false">重新显示用户控制的数据。
也可以看看:

  • Why JSF saves the state of UI components on server?
  • Am I under risk of CSRF attacks in a POST form that doesn't require the user to be logged in?
  • CSRF, XSS and SQL Injection attack prevention in JSF
  • How does different phases of JSF lifecycle behave in a stateless view containing a form
  • 关于jsf - JSF 中无状态的用处是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14890995/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com