同一个Controller Spring MVC中有多个用户

时间:2013-04-05 14:11:06

标签: java tomcat spring-mvc web controller

我开始为Web开发,我使用Spring MVC作为我的服务器框架。现在我想知道在Controller类中创建变量。我不得不这样做来管理服务器中的一些数据,但现在我担心以下情况:如果我有多个用户向同一页面发送信息,同时一个用户会干扰另一个用户变量?

以下是一些代码示例:

@Controller
public Class myController {

    int number;


    @RequestMapping("/userInformation")
    public String getInformation(int info) {
       number = info;
    }

    public void doSomethingWithIt() {
       number = number + 1;
   }

}

在这种情况下,如果我有多个用户同时向/ userInformation发送数据,Spring MVC会为每个用户创建一个Controller吗?我猜这种方式我不会有问题。但如果没有,我必须重新考虑这个实现,不是吗?

3 个答案:

答案 0 :(得分:3)

你是对的。控制器是单身人士,必须是无国籍人。服务器端状态属于会话或数据存储。您还可以使用请求范围对象(在spring中查看bean范围)。

答案 1 :(得分:1)

Spring容器将创建一个Controller实例。因此,所有用户都将共享该实例。

如果您拥有用户私有的数据,您有以下几种选择:

  1. 将其存储在HTTP会话中(如果是大量数据,则不推荐使用,因为内存使用情况可能会爆炸)
  2. 将其存储在数据库中,并根据识别用户的某些属性,在每次请求时检索它
  3. 将其存储在内存缓存中,并根据标识用户的某些属性
  4. 在每次请求时检索它

    选项3是其中最简单的一个,如果您愿意,您甚至可以在Map<User, UserData>上将其实现为Controller实例变量。它不是最干净,最美丽或最安全的选择,只是最简单的选择。

答案 2 :(得分:0)

您不应在Spring Controller中使用任何表示控制器类状态的实例变量。它的单个实例不应该有状态。相反,您可以引用注入的托管bean。