2013-04-05 59 views
0

我開始爲Web開發,我使用Spring MVC作爲我的服務器框架。現在我想知道在Controller類中創建變量。我不得不這樣做來管理服務器中的一些數據,但現在我關注以下情況:如果我有多個用戶將信息發送到同一頁面,同時,一個用戶會干擾另一個用戶變量?同一個控制器中的多個用戶Spring MVC

下面是一些代碼示例:

@Controller 
public Class myController { 

    int number; 


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

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

} 

在這種情況下,如果我有一個以上的用戶在同一時間將數據發送到/ userInformation,將Spring MVC中爲每個用戶創建一個控制器?我猜這樣我就沒有問題了。但是,如果不是,我不得不重新考慮這個實施,不是嗎?

回答

1

Spring容器將創建Controller的一個實例。因此,所有用戶都將共享該實例。

如果您有數據,是私人用戶,你有幾種選擇:

  1. 其存儲在HTTP會話(不推薦,如果這是一個很大的數據,爲您的內存使用可能會爆炸)
  2. 它存儲在數據庫中並檢索它根據每個請求,根據一些屬性標識所述用戶
  3. 存儲它在存儲器中的高速緩存和檢索它在每個請求的基礎上,一些屬性標識所述用戶

選項3是其中最簡單的選項,如果您願意,您甚至可以在Controller上將它實現爲Map<User, UserData>實例變量。這不是最乾淨,最美麗或最安全的選擇,只是最簡單的選擇。

+0

謝謝!這是最完整的答案! – 2013-04-05 15:55:45

3

你說得對。控制器是單身人士,必須是無國籍的。服務器端狀態屬於會話中或數據存儲區中。你也可以使用請求作用域對象(在春季查看bean作用域)。

0

您不應該在Spring控制器中使用任何表示控制器類的狀態的實例變量。它從一個實例開始就不應該有狀態。相反,您可以引用注入的託管bean。

+0

我不同意:Spring控制器可能有實例變量。如果你想使用另一個Spring bean,你希望Spring容器爲你注入這個bean。如果bean在你的控制器中作爲一個實例變量存在,那最容易實現。唯一的問題是,你的控制器上不應該有代表狀態*的實例變量*。 – mthmulders 2013-04-05 14:18:21

+0

@mthmulders謝謝你,我的意思是......我會更新我的答案,以便更清楚地說明這一點! – user1697575 2013-04-05 14:20:15

相關問題