前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ServletContextListener简单应用:统计访问人数

ServletContextListener简单应用:统计访问人数

作者头像
the5fire
发布2019-02-28 10:26:24
9130
发布2019-02-28 10:26:24
举报

在Servlet API中有这样一个ServletContextListener接口,他能过监听servletContext的生命周期,也就是web应用的生命周期。 servletContextListener接口中定义了两个方法,分别用于监听web应用的创建和销毁,利用这两个方法可以完成对网站访问人数进行统计。 下面用一个实例来说明: 首先建一个InitListener.java,用来监听每一web应用的创建,其原理是这样的,每有一个用户访问该网站(jsp),服务器必定会启动一个web应用,可以通过继承servletContextListener来监听web的启动,从而统计来访人数。 InitListener.java:

.. code:: java

代码语言:javascript
复制
package com.listener;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;



public class InitListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent sce){
        System.out.println("application is Initialized.");
            //获取ServletContext对象
        ServletContext context=sce.getServletContext();
        try{
            //从文件中读取计数器的数值
            BufferedReader reader=new BufferedReader(
            new InputStreamReader(context.getResourceAsStream("/count.txt")));
            int count=Integer.parseInt(reader.readLine());
            System.out.println(count);
            reader.close();
            //把计数器对象保存到Web应用范围
            context.setAttribute("counter",count);
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    public void contextDestroyed(ServletContextEvent sce){
        System.out.println("application is Destroyed.");
            //获取ServletContext对象
        ServletContext context=sce.getServletContext();
            //从Web应用范围获得计数器对象
        int counter=(Integer)context.getAttribute("counter");

        if(counter != 0){
            try{
                //把计数器的数值写到count.txt文件中,这里最好把路径输出一下,网站运行时的物理路径
                String filepath=context.getRealPath("");
                filepath=filepath+"/count.txt";
                System.out.println(filepath);
                PrintWriter pw=new PrintWriter(filepath);
                counter++;//统计数量累加
                System.out.println(counter);
                pw.println(counter);
                pw.close();
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
    }


}

配置web.xml文件:

::

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <listener>
        <listener-class>com.listener.InitListener</listener-class>
    </listener>
</web-app>

建一个index.jsp页面:

::

代码语言:javascript
复制
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
我是打酱油的
<body>
</body>
</html>

这样每次启动系统都会读取counter.txt文件中的数字,然后在web应用关闭的时候进行加一,存储。其实这些数据存储在数据库中更方便一点。这个就自由发挥了。 ServletContextListener的运用有很多,比如说缓存的创建等等。 扩展阅读: 运用ServletContextListener在服务器启动和关闭时创建和关闭缓存 <http://www.qqgb.com/Program/Java/JavaBlog/Program_145756.html>_

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011-01-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档