2011-12-05 27 views
2

我想創建一個簡單的服務類應用程序。我使用瀏覽器作爲入口點,servlet作爲請求的接收者和一些輔助java類。例如,我有用戶A與用戶B同時使用該應用程序。多個用戶在由Web應用程序使用普通Java對象時會發生什麼情況?

現在我的問題是,當多個用戶訪問服務時,助手類會發生什麼?每次用戶使用應用程序時,它們都會被實例化嗎? 5個用戶,他們(助手類)是否被實例化了5次,或者對於所有的用戶,只有一個副本?

+0

我不明白,輔助班是pojos嗎?或者你知道pojos會發生什麼,但不知道輔助類會發生什麼情況? – omarello

+0

對於不清楚的解釋,我很抱歉。 pojos是助手類。我不確定當多個用戶使用Web應用程序時他們會發生什麼。 –

+0

@simon:無法查看代碼就無法提供答案。有幾種方法可以使用Java類(和對象)。 – home

回答

2

這取決於您何時何地實例化這些POJO。如果您在doGet或doPost上實例化它們,那麼您可以在每個請求中創建這些對象的新實例(並在請求響應後放棄它們)。現在,如果您將它們「延遲實例化」到更長的內存範圍(會話等),那麼您將它們保留更長時間(例如,在會話範圍內,貫穿整個會話生命週期)。

+0

正是我所期待的!謝謝@Hyangelo –

1

一個簡單的答案是,無論何時使用new YourClasseName(),都會實例化一個新對象。因爲servlet容器爲單個servlet的每個新請求分配一個線程(除非你做了某種特殊的更改),那麼簡單地說,5個用戶= 5個線程= 5個調用來構建你的pojos。意思是你的對象被實例化5次。

+0

嘿謝謝@omarello,我對servlet如何行動感到困惑。但你清楚地解釋了它。感謝它 –

1

我認爲你需要回頭閱讀Java中的類實例化及其生命週期。爲了更具體地瞭解您的情況,請提供代碼片段。這將取決於你如何實例化你的助手類,3種可能性,我能想到的:

1-常規輔助類

在這裏,您只需撥打Helper h = new Helper();,你只需撥打助手類行爲的情況下h.doHelp(param) - 每當您的Servlet調用此函數時,它會創建Helper類的新實例。除非你的助手類使用任何靜態變量。

2 - 辛格爾頓

當你實現你的助手類作爲一個Singleton和你的servlet調用它辛格爾頓的創建方法,如Helper h = Helper.getInstance()如果你這樣做的,那麼每一個請求到Servlet的共享同一個實例的赫普勒類

3 - 靜態類

如果你的助手類只是使用靜態方法,例如。 Helper.doHelp(param);那麼在不同的請求之間也沒有共享,除非你的幫助類使用任何靜態變量。

+0

以及我只使用常規的幫助類。在實例化結束時,我有h1,h2,h3,每個都有自己的幫助器方法。 –

1

你的幫助器類應該是單例,這樣,userA和userB都將使用相同的實例,而不是實例化兩次。

+0

我想我可以做到這一點,但如果我爲每個請求創建並銷燬循環會更好嗎? –

相關問題