Java 使用相同servlet的多个用户是否会覆盖彼此的变量?
我通过servlet调用Java后端,每次调用API im时,我都需要提供密码和用户名。我是否可以将用户密码/用户名保存在变量中,以便用户每次调用API时都可以使用它 或者如果有多个用户,变量会被覆盖吗Java 使用相同servlet的多个用户是否会覆盖彼此的变量?,java,servlets,Java,Servlets,我通过servlet调用Java后端,每次调用API im时,我都需要提供密码和用户名。我是否可以将用户密码/用户名保存在变量中,以便用户每次调用API时都可以使用它 或者如果有多个用户,变量会被覆盖吗 总的问题可能是:是每个用户都获得了新的“新鲜”servlet,还是以前从用户那里保存的数据?servlet是出于性能原因而共享的,因此它们应该是无状态的(或者线程安全的,但这样做只是重新发明轮子)。如果您需要与用户保持状态,请将其放入HttpSession出于性能原因,servlet是共享的,因
总的问题可能是:是每个用户都获得了新的“新鲜”servlet,还是以前从用户那里保存的数据?servlet是出于性能原因而共享的,因此它们应该是无状态的(或者线程安全的,但这样做只是重新发明轮子)。如果您需要与用户保持状态,请将其放入
HttpSession
出于性能原因,servlet是共享的,因此它们应该是无状态的(或者线程安全的,但是您只是在重新发明轮子)。如果需要与用户保持状态,请将其放入HttpSession
是否每个用户都获得了新的“新鲜”servlet,或者数据是从
以前的用户
Servlet实例将只创建一次(除非您使用SingleThreadModel
)&由容器维护(如Tomcat等),即一个Servlet实例将被所有请求使用/共享
因此,不要使用servlet的实例变量来存储任何数据
我可以将用户密码/用户名保存在变量中以便使用它吗
每次用户调用API时
您不应该将用户ID和密码保存到JVM(RAM)内存中,因为当JVM关闭时,您将丢失所有数据,因此您需要使用一些持久性存储,如数据库或文件系统
是否每个用户都获得了新的“新鲜”servlet,或者数据是从
以前的用户
Servlet实例将只创建一次(除非您使用SingleThreadModel
)&由容器维护(如Tomcat等),即一个Servlet实例将被所有请求使用/共享
因此,不要使用servlet的实例变量来存储任何数据
我可以将用户密码/用户名保存在变量中以便使用它吗
每次用户调用API时
您不应该将用户名和密码保存到JVM(RAM)内存中,因为当JVM关闭时,您将丢失所有数据,因此您需要使用一些持久性存储,如数据库(首选)或文件系统。如果您使用静态变量,那么这些变量将在用户之间共享。此外,这是一个并发问题,您需要处理它。如果变量不是静态的,那么每个用户都有一个被排除的实例 无论如何,如果您希望存储一些信息,并且希望将来在特定用户调用servlet时检索这些信息,那么使用HttpSession是很常见的。此外,考虑到您需要在客户端中抓取HTTP Cookie并将其发送到服务器进行进一步的调用。 此外,服务器为每个客户机提供API密钥也是常见的情况。然后,每当客户机想要调用API时;有必要通过特定的http头发送密钥
如果在服务器和客户端之间不使用HTTPS之类的安全连接,上述场景可能会出现一些安全问题。如果使用静态变量,则变量会在用户之间共享。此外,这是一个并发问题,您需要处理它。如果变量不是静态的,那么每个用户都有一个被排除的实例 无论如何,如果您希望存储一些信息,并且希望将来在特定用户调用servlet时检索这些信息,那么使用HttpSession是很常见的。此外,考虑到您需要在客户端中抓取HTTP Cookie并将其发送到服务器进行进一步的调用。 此外,服务器为每个客户机提供API密钥也是常见的情况。然后,每当客户机想要调用API时;有必要通过特定的http头发送密钥
如果不在服务器和客户端之间使用HTTPS之类的安全连接,上述场景可能会出现一些安全问题。Servlets按线程执行请求,因此不会保存以前请求中的任何数据。您可以使用session.Servlets在每个线程的基础上执行请求,因此不会保存来自上一个请求的任何数据。您可以使用会话。