2015-09-28 43 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声明只能使用一个实例。” –