统计访问次数,用servlet的成员变量还是ServletContext好?
请问各位使用java web开发的前辈,servlet的成员变量用于统计servlet的访问次数的时候,与使用ServletContext相比,有什么区别呢?
或者换句话说,这两种方式,各有什么优缺点和应用呢?
------解决方案--------------------用ServletContext好。用Servletcontext对磁盘操作次数非常少,根据servlet的生命周期可以知道
用servletContext的话,只需在init的时候把数据读取出来,在destroy的时候把数据存入进去。而如果用servlet的成员变量的对磁盘的操作次数非常多。
------解决方案--------------------入库吧
除非你的服务器永久处于运行状态,要不然不管你是用Servlet上下文还是用类成员变量都是浮云!!
------解决方案--------------------
存servletcontext。
至少要定期存库。除非你能保证每次都是正常关闭,要是服务器进程死了,谁来执行destroy方法
------解决方案--------------------小应用直接servlet写数据库
稍大的用apache写日志,然后写个服务计算。
------解决方案--------------------肤浅??呵呵。。
直接用Servlet成员变量会有线程安全问题,导致在线计数统计不精确。而且计数通常要用long型,那就更夸张了。由于java内部只支持32位的写入,那么写一个long型可能需要两次写入,为了优化可能会启动两个线程。那么会导致取到的long型是随机值。
用ServletContext会不会有这个问题不知道。只是成熟的framework,会在变量上加volatile,技术的类型用java.util.concurrent.atomic.AtomicLong;