12. Servlet 页面点击计数器

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);

网站的总在线量
通过 Http SessionListener实现;
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
    评论
Java EE Web开发实例精解完整光盘 郝玉龙,尹建平 著 清华大学出版社,北京交通大学出版社 2008-03-01 《Java EE Web开发实例精解》采用工程实例的形式对JAVA EE Web编程技术进深入系统的讲解。JAVA EE Web应用系统从逻辑上可划分为表现层、业务层和持久层,为了使读者对JAVA EE编程技术获得全面系统的了解,《Java EE Web开发实例精解》以JAVA EE Web应用系统的逻辑加构为主线,通过多个典型工程实例对上述三个层次的开发技术和编程技巧进行讲解,并对同一实例的多个解决方案进行对比分析,切实帮助开发人员提高JAVA EE Web开发水平。   除了对JAVA EE Web编程基本技术的讲解淙外,还针对Web应用开发中如打印、图表、日志、上传、下载和国际化等常见功能特性的实现,综合运用多种JAVA EE开发技术,提出多种解决方案,并深入讲座分析,对开发人员动手开发实际项目具有借鉴意义。最后,通过三个综合实例,演示如何利用EJB及Struts、Hibernate、Spring等常见的Java EE 架构开发企业Web应用系统 目录 第1章 构建动态Web页面 例程1-1:利用Servlet显示动态日期 例程1-2:利用JSP表达式显示动态格式文本 例程1-3:利用JSP标准标记库和表达式语言显示动态新闻 例程1-4:利用自定义标记控制网页图片显示 例程1-5:利用Applet在Web布面实现时钟 例程1-6:利用JSP与Flash实现用户登录和注册模块 例程1-7:利用JavaScript脚本实现奥运倒计时日历 例程1-8:利用XML、CSS和XSL显示食谱信息 例程1-9:利用标准标记库显示本地化信息 例程1-10:在Web页面中引入版权信息声明 例程1-11:实现带图形码验证的用户登录 例程1-12利用Ajax实现网上智能订餐 第2章 服务器与客房端的交互 例程2-1:奥运网上问卷调查 例程2-2:发送PDF文件到客房端浏览器 例程2-3:客户信息显示栏 例程2-4:获取服务器基本信息 例程2-5:横幅广告系统 例程2-6:利用过滤器限制客房端访问 例程2-7:多组件协作实现用户用户登录验证 本章小结 第3章 管理和维护应用程序状态 例程3-1:购物车 例程3-2:聊天室 例程3-3:网站计数器 本章小结 第4章 访问企业信息资源 例程4-1:发送接收E-mail 例程4-2:访问数据库 例程4-3:创建基于XML的网上论坛 例程4-4:访问体重检测Web服务 本章小结 第5章 开发Web高级功能特性 第6章 应用架构 预备知识:软件架构 例程6-1:利用EJB实现公告发布系统 例程6-2:基于Struts构建新闻发布系统 附录A 开发环境的搭建 附录B 知识点索引 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值