2015-09-28 31 views
0

我想統計我的servlet程序在應用程序中運行的次數。程序中的servlets計數

我在servlet的doPost方法中使用了count變量。每次運行應用程序時,計數都會增加。但是如果關閉編輯器(eclipse/netbeans)或關閉項目,我的計數將被重置爲零,因爲我的servlet容器也將停止運行。

一種方法是將我的計數值保存在數據庫中。除了關閉編輯器或項目之後,我還可以存儲計數值的數據庫還有其他方法嗎?我可以將我的計數值存儲在文件中嗎?

+2

技術上保存/寫入文件中的計數值可以完成您保存在數據庫中的相同方式。你試過了嗎? – Baby

+0

是的,你可以將它存儲在一個文件中。您存儲在:文件,數據庫,註冊表,雲或其他任何你想要的。 – Andreas

回答

2

一般而言,您可以隨時存儲計數值,文件,任何類型的數據庫等。

但是我想說的是,一般來說servlet是設計用於在許多用戶可以同時訪問servlet的環境中運行的,因此您總是需要考慮同步。 serlvet類的多個實例可以存在(這取決於您的Web容器何時創建它們)。

一般來說,你需要做的是:

  • 獲取當前值
  • 商店增加值的價值

現在,這件事必須謹慎實現。 根據在底層上,你可能要考慮使用事務:For example for postgesql

另一個例子是使用NoSQL的商店一樣的Redis: Read Pattern counter section

最好的方式來實現分佈式櫃檯真的取決於底層存儲,以便它很難就任何更具體的建議提供建議,選擇是你的。

我想提到的另一個方面是Web應用程序的分佈式特性。如果它是一個真實世界的應用程序,最終你可能想要在多個服務上運行它並「擴展」(至少在我看來,它是現代服務器端軟件的一種趨勢)。

從這個角度來看,應用程序不能真正使用本地文件,比如windows註冊表,因爲文件系統不是分發的東西(除非使用分佈式文件系統)。

希望,這有助於

+1

我一般同意,除了「多個serlvet類的實例可以存在(這取決於你的web容器何時創建它們)」。 servlet規範明確地規定:「servlet容器每個servlet聲明只能使用一個實例。」 –