使用相同Servlet的多个用户是否会覆盖每个变量?

时间:2017-04-07 11:55:24

标签: java servlets

我正在通过servlet调用Java后端,并且每次调用API时都需要提供密码和用户名。我可以将用户密码/用户名保存在变量中,以便每次用户调用API时都可以使用它吗?

如果有多个用户,是否会覆盖变量?

整体问题或许是:每个用户是否都会获得新的“新”servlet,或者之前是否从用户那里保存了数据?

3 个答案:

答案 0 :(得分:2)

出于性能原因共享Servlet,因此它们应该是无状态的(或者是线程安全的,但是你只需要重新发明轮子)。如果您需要与用户保持状态,请将其放入HttpSession

答案 1 :(得分:0)

  

每个用户都会获得新的“新”servlet,或者是从中保存的数据   用户之前?

Servlet实例只会创建一次(除非你做的事情不同,比如使用SingleThreadModel)&由容器维护(如Tomcat等),即所有请求都将使用/共享一个servlet实例。

因此,不要使用servlet的实例变量来存储任何数据。

  

我可以将用户密码/用户名保存在变量中,以便我可以使用它   每次用户调用API?

您不应该将用户ID和密码保存到JVM(RAM)内存中,因为在JVM关闭时会丢失所有数据,因此您需要使用一些持久性存储像数据库(更喜欢这个)或文件系统。

答案 2 :(得分:0)

如果使用静态变量,则变量在用户之间共享。此外,这是一个并发问题,你需要处理它。如果变量不是静态的,那么每个用户都会有一个被排除的实例。

无论如何,如果你想存储一些信息并且想要在将来当特定用户调用servlet时检索它们,那么通常使用HttpSession。另外,请考虑您需要在客户端中获取http cookie并将其发送到服务器以进行进一步调用。

此外,服务器为每个客户端提供API密钥的常见情况也是如此。然后每当客户想要调用API时;有必要通过特定的http标头发送密钥。

如果您不在服务器和客户端之间使用HTTPS之类的安全连接,则上述方案会出现一些安全问题。