Servlet-12- 页面点击计数器

参考:http://blog.csdn.net/al_assad/article/details/76087789

Servlet 页面点击计数器

实现Servlet上某个页面的总点击量,使用 Servlet 来计算这些点击量是非常简单的,因为一个 Servlet 的生命周期是由它运行所在的容器控制的。

以下是实现一个简单的基于 Servlet 生命周期的网页点击计数器需要采取的步骤:
  • 在 init() 方法中初始化一个全局变量;
  • 每次调用 doGet() 或 doPost() 方法时,都增加全局变量;
  • 如果需要,可以在destroy() 中可以使用一个数据库表来存储全局变量的值。在下次初始化 Servlet 时,该值可在 init() 方法内被读取,这样处理可以实现该数据的持久化;
  • 如果只想对一个 session 会话计数一次页面点击,那么请使用 isNew() 方法来检查该 session 会话是否已点击过相同页面;

在这里,假设 Web 容器将无法重新启动。如果是重新启动或 Servlet 被销毁,计数器将被重置。
public class PageHitCounter extends HttpServlet {
    private int hitCount; 
    public void init(){
        hitCount = 0; // 重置点击计数器,如果要实现hitCount的持久化,可以在这里从数据库中读取该数据
    } 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        // 增加 hitCount 
        hitCount++; 
        
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String docType = "<!DOCTYPE html> \n";
        out.println(docType +
            "<html>\n" +
            "<head><title>Hit Count</title></head>\n" +
            "<body">\n" +
            "<h1 align=\"center\">Hit Count</h1>\n" +
            "<h2 align=\"center\">" + hitCount + "</h2>\n" +
            "</body></html>");
    }
    
    public void destroy() { 
        // 但是如果需要实现hitCount的持久化,可以把 hitCount 的值写入到数据库
    } 
​
}
以下是实现一些页面计数器的思路;

网站所有页面的总访问量
使用 Filter 过滤器实现,设置某个过滤器,映射到所有页面(HTML,Servlet,JSP),在该 Filter 的doFilter()过程中 对储存在数据库中的计数值进行增加(也可以将该计数值储存在 web.xml 中<filter><init-param>中);

某个页面的总访问量
如果该页面是Servlet,可以在其 init() 时对计数值进行初始化(从数据库读取),在service()对该计数值进行自增,在destroy()将该计数值写入数据库(如果考虑到数据同步问题,在destory时不直接将计数值写入数据库,而是直接在数据库中对该数据进行自增,以保持数据同步);
如果该页面是 JSP 或 HTML,可以直接使用Filter映射到指定页面实现(也适用与Servlet);

网站的总在线量
通过 HttpSessionListener实现;
OlineCount.java :记录在线信息
(也可以实现为一个记录所有在线人数信息的列表,此时要在OnlineListener实现 HttpSessionAttributeListener后在其 attributeAdded ,attributeRemoved方法进行相应的实现,同时要在负责登录登出的Sevlet进行session添加,删除相应属性 );
//应该实现 count 数据的同步性,这里略过
public class OnlineCount{
    private static int count = 0;
    public static void add(){
        count ++;
    }
    public static void reduce(){
        count --;
    }
    public static int value(){
        return count;
    }
}
OnlineListener.java : HttpSessionListener 监听器类
public class OnlineListener implements HttpSessionListener{  
    //根据session的建立和销毁进行计数
    public void sessionCreated(HttpSessionEvent se) {  
        OnlineCount.add();
    }  
    public void sessionDestroyed(HttpSessionEvent se) {  
        onlineCount.reduce();
    } 
}  
web.xml 中添加 listener的配置
<listener>  
    <listener-class>listener.OnlineListener</listener-class>  
</listener>  
在 Servlet 或 JSP 中要获取在线总人数 直接调用 OnlineCount.value();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值