Java JSF是否在两个请求之间缓存每个组件的状态?

Java JSF是否在两个请求之间缓存每个组件的状态?,java,jsf,Java,Jsf,“在JSF中,每个组件的状态都存储在请求之间”——这意味着数据被缓存在应用服务器上(!?),所以服务器现在将有更大的内存需求(!?) 但是我想我们也可以将状态requestscope,这样就不会在两个请求期间在应用服务器上缓存数据,对吗?我理解对了吗 [我的应用程序包含用户的博客文章,这些博客文章都是大文本块,缓存成本非常高。但确实有些数据需要缓存!]去年,我不得不创建两个JSF应用程序。如果我没记错的话,您可以将数据缓存在支持Bean中,这样您就不会在每次刷新时访问数据库来检索日志内容 JSF

“在JSF中,每个组件的状态都存储在请求之间”——这意味着数据被缓存在应用服务器上(!?),所以服务器现在将有更大的内存需求(!?)

但是我想我们也可以将状态
requestscope
,这样就不会在两个请求期间在应用服务器上缓存数据,对吗?我理解对了吗


[我的应用程序包含用户的博客文章,这些博客文章都是大文本块,缓存成本非常高。但确实有些数据需要缓存!]

去年,我不得不创建两个JSF应用程序。如果我没记错的话,您可以将数据缓存在支持Bean中,这样您就不会在每次刷新时访问数据库来检索日志内容

JSF有一个非常强大的服务器客户端。实际上,不可能想象JSF只在GWT这样的客户机上运行


您是否在使用IceFaces或其他任何类似RichFaces的JSF实现?

您在这里提到的这句话是关于JSF状态保存的,它保存组件树的状态。默认情况下,这是在服务器上完成的。。。但是你也可以在客户机上这样做,以节省一些内存。见此:

支持bean范围是另一回事。您可以将backingbean设置为会话/请求/视图范围(甚至使用另一个或自定义范围)。这将对服务器内存使用产生影响。然而,如果你做得正确并且没有大数据需求,你可以管理它。例如,您可以尽可能少地存储数据,并定期重新加载数据(从数据库…)

所有这些并不意味着你的数据被缓存(至少,不是来自持久存储的数据)。这取决于你


所以,内存需求是需要注意的。成熟的JavaEE服务器的基本设置通常比apache服务器上的php应用程序的基本设置要多。。。但是,如果做得正确,使其更快/更好/更具可伸缩性(cpu/mem)可能更容易实现。

那么如何使其无状态,从而使数据(状态)不存储在请求之间??否则,如果我保持原样,那么数据将被缓存,对吗?我希望混合一些状态将被存储的数据和一些状态不会被存储的数据。我希望如果我将支持bean的范围限制为RequestScope,那么状态将不会存储在两个requestsIf by data之间,您的意思是“我从数据库检索到的内容”,那么它与JSF无关,缓存也不会发生在JSF上。如果您将某个内容(来自db的数据?)放在托管bean属性中,其范围将是bean本身的范围。另外,不要试图过度优化。如果必须在每个请求上重新加载相同的数据,请考虑将数据存储在会话(或一些中间作用域)中。不管怎样,您不是混合了JSF状态保存(组件树)和托管bean范围吗?对不起,我仍然混淆了JSF状态数据存储和备份bean存储。我相信组件状态存储在相应的bean中。现在为什么相同的状态被存储两次(在bean和JSF状态中)。再次抱歉,我真的很困惑..JSF状态保存是关于保存组件树的。组件树是包含每个组件状态的结构。组件可以有许多可见和不可见的属性,状态存储在其中。您可以将这些属性的值绑定到支持bean,但不必将它们全部绑定。因此,组件树会自动保存在某个位置(服务器或客户端)。托管bean属性存储在bean范围(请求/会话对象,…)中。我期待着现在为社交网络应用程序选择一个组件库。。你有什么建议吗?我更倾向于primefaces&RichFacesSprimeFaces是最古老的jsf2库,有大量组件