我开始为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吗?我猜这种方式我不会有问题。但如果没有,我必须重新考虑这个实现,不是吗?
答案 0 :(得分:3)
你是对的。控制器是单身人士,必须是无国籍人。服务器端状态属于会话或数据存储。您还可以使用请求范围对象(在spring中查看bean范围)。
答案 1 :(得分:1)
Spring容器将创建一个Controller实例。因此,所有用户都将共享该实例。
如果您拥有用户私有的数据,您有以下几种选择:
选项3是其中最简单的一个,如果您愿意,您甚至可以在Map<User, UserData>
上将其实现为Controller
实例变量。它不是最干净,最美丽或最安全的选择,只是最简单的选择。
答案 2 :(得分:0)
您不应在Spring Controller中使用任何表示控制器类状态的实例变量。它的单个实例不应该有状态。相反,您可以引用注入的托管bean。