如何使java Web应用程序完全无状态

我知道有很多关于有状态应用程序和无状态应用程序之间差异的讨论,无状态是函数编程语言所做的事情,每个使用相同args的函数调用将返回相同的值。

这是否意味着面向对象的语言无法构建完全无状态的应用程序,因为每个对象通常都具有状态。

此外,在Java Web应用程序中,我们通常需要跟踪用户状态,并通过会话解决。 但是如何在无状态方式的分布式系统中做到这一点?

当一个系统死亡时,我们需要通过另一个服务器以某种方式识别会话,以便转移用户状态。 我们是否需要将会话放在中央数据库(缓存)中?但这是无状态的吗?

在我们使java Web应用程序无状态之前,除了会话之外还需要关注什么?

您不在服务器上存储任何客户端状态信息,将其传递到需要它的任何地方,并在服务器需要更改时将其传递回客户端。 这就是无国籍的意思,没有国家。 服务器不应该知道客户端处于什么状态,直到客户端告诉它状态是什么。

最简单的方法是将会话信息存储在某个键值存储中。 看看这里: Tomcat:在数据库中存储会话

为了“真正的”无国籍,必须没有任何会话。 这意味着:用户将对每个请求进行身份validation,并且每次请求都必须检查凭据。 (它与会话数据库非常相似)