日期:2014-05-17  浏览次数:21052 次

统计访问次数,用servlet的成员变量还是ServletContext好?
请问各位使用java web开发的前辈,servlet的成员变量用于统计servlet的访问次数的时候,与使用ServletContext相比,有什么区别呢?
或者换句话说,这两种方式,各有什么优缺点和应用呢?

------解决方案--------------------
用ServletContext好。用Servletcontext对磁盘操作次数非常少,根据servlet的生命周期可以知道
用servletContext的话,只需在init的时候把数据读取出来,在destroy的时候把数据存入进去。而如果用servlet的成员变量的对磁盘的操作次数非常多。
------解决方案--------------------
入库吧


除非你的服务器永久处于运行状态,要不然不管你是用Servlet上下文还是用类成员变量都是浮云!!
------解决方案--------------------
引用:
全局的信息,到底是用servlet的类变量来储存,还是application来储存比较好,哪位前辈可以给个定论?

当然前提是,不管用哪种,在destroy的时候都是会入库的


存servletcontext。
至少要定期存库。除非你能保证每次都是正常关闭,要是服务器进程死了,谁来执行destroy方法
------解决方案--------------------
小应用直接servlet写数据库
稍大的用apache写日志,然后写个服务计算。
------解决方案--------------------
肤浅??呵呵。。

直接用Servlet成员变量会有线程安全问题,导致在线计数统计不精确。而且计数通常要用long型,那就更夸张了。由于java内部只支持32位的写入,那么写一个long型可能需要两次写入,为了优化可能会启动两个线程。那么会导致取到的long型是随机值。

用ServletContext会不会有这个问题不知道。只是成熟的framework,会在变量上加volatile,技术的类型用java.util.concurrent.atomic.AtomicLong;