Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用相同servlet的多个用户是否会覆盖彼此的变量?_Java_Servlets - Fatal编程技术网

Java 使用相同servlet的多个用户是否会覆盖彼此的变量?

Java 使用相同servlet的多个用户是否会覆盖彼此的变量?,java,servlets,Java,Servlets,我通过servlet调用Java后端,每次调用API im时,我都需要提供密码和用户名。我是否可以将用户密码/用户名保存在变量中,以便用户每次调用API时都可以使用它 或者如果有多个用户,变量会被覆盖吗 总的问题可能是:是每个用户都获得了新的“新鲜”servlet,还是以前从用户那里保存的数据?servlet是出于性能原因而共享的,因此它们应该是无状态的(或者线程安全的,但这样做只是重新发明轮子)。如果您需要与用户保持状态,请将其放入HttpSession出于性能原因,servlet是共享的,因

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

或者如果有多个用户,变量会被覆盖吗


总的问题可能是:是每个用户都获得了新的“新鲜”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在每个线程的基础上执行请求,因此不会保存来自上一个请求的任何数据。您可以使用会话。