繁体   English   中英

避免在 servlets 之间共享 static 变量

[英]Avoid sharing static vars among servlets

我已经使用 servlets 中的 static 个变量实现了整个网站。像这样

public class UserData extends HttpServlet {

    public static String fisrtName;
    public static String lastName;
    public static String id;
    
    ...

我完全不熟悉使用 servlets,如果这个问题看起来太愚蠢,我深表歉意。

无论如何,我现在的问题是,当一个用户连接时,其他可能连接的用户会直接获得第一个用户提供的所有数据。

我需要一些方式来说明所有这些 static 变量不能在连接之间共享。

请告诉我最简单的方法,因为项目快完成了,到目前为止我还没有意识到这个巨大的陷阱。

谢谢。

正如@haoyu wang 所建议的那样,session 是一个好地方,但将所有字段收集到一个 class 中(例如不是 static 变量):

public class UserInfo{
    public String fisrtName;
    public String lastName;
    public String id;
    ...
}

然后设置/检索为一个单元,以便您可以更轻松地将用户信息传递给 servlets 的其他组件:

UserInfo info = session.getAttribute("userinfo");
if (info == null) {
    userinfo = new UserInfo();
    ... fill in fields / validate
    session.setAttribute("userinfo", userinfo);
}

请注意,getValue 和 putValue 已弃用,因此应改用 getAttribute / setAttribute。

您应该将这些数据放在 session 中,例如session.putValue("firstName",name)并使用session.getValue("firstName")来检索它们。

Session 对象不会在不同的会话中共享,不同的用户有不同的会话。 您不必担心它们会在不同用户之间共享。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM