避免在Servlet之间共享静态变量

时间:2020-07-29 13:40:15

标签: java jsp web servlets

我已经在servlet中使用静态变量实现了整个网站。像这样

public class UserData extends HttpServlet {

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

我绝对不是使用servlet的新手,如果这个问题看起来太傻了,那就抱歉。

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

我需要某种方式说所有这些静态变量都不能在连接之间共享。

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

谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

请注意,不建议使用getValue和putValue,因此应改用getAttribute / setAttribute。

答案 1 :(得分:0)

您应该将这些数据放入会话中,例如session.putValue("firstName",name),然后使用session.getValue("firstName")进行检索。

会话对象将不会在不同的会话中共享,并且不同的用户拥有不同的权限。您不必担心它们会在其他用户之间共享。

相关问题