Web访问计数器

来源:互联网 发布:手机设计软件 编辑:程序博客网 时间:2024/05/21 17:24

Web访问计数器

1.首先新建一个Counter类

public class Counter

{

    private int count;

 

    public Counter(int count)

    {

        super();

        this.count = count;

    }

 

    public int getCount()

    {

        return count;

    }

 

    public void setCount(int count)

    {

        this.count = count;

    }

 

    public void add(int step)

    {

        count += step;

    }

}

 

2.新建一个Servlet进行测试(CounterServlet

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

    doPost(request, response);

}

 

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

    ServletContext context = getServletContext();

    Counter counter = (Counter) context.getAttribute("counter");

 

    if (counter == null)

    {

        counter = new Counter(1);

        context.setAttribute("counter", counter);

    }

    response.setContentType("text/html;charset=GB2312");

    PrintWriter out = response.getWriter();

    out.write("Hello,您是第" + counter.getCount() + "个游客!");

    out.println("Hello,您是第" + counter.getCount() + "个游客!");

    counter.add(1);

}

 

3.进行测试

在浏览器中输入访问地址:

http://localhost:8080/TestPro/servlet/CounterServlet

 

 

4.按照上面的方式,我们可以实现一个网站访问的计数器,但当服务器重启之后,访问数又会清零,我们可以使用ServletContextListenerServletContext被销毁时存储访问量,在ServletContext重新被创建时,对访问量初始化。

关于ServletContextListener接口:

    ServletContextListener能够监听ServletContext的生命周期,当Servlet容器启动和关闭时,都会触发ServletContextEvent事件,而该事件是由ServletContextListener来处理的,在ServletContextListener接口中定义了两个方法来处理ServletContextEvent事件:

(1).contextInitialized(ServletContextEvent event):Servlet容器启动时调用此方法,在调用完contextInitializaed(ServletContextEvent event)之后,容器再对Filter初始化,对初始化那些在Web应用启动时需要加载的Servlet

(2).contextDestroy(ServletContextEvent event):Servlet容器终止Web应用时,会调用此方法,在调用此方法之前,Servlet容器会首先销毁所有的ServletFilter过滤器。

 

自定义MyServletContextListener类,实现ServletContextListener接口。

 

public class MyServletContextListener implements ServletContextListener

{

 

    public void contextDestroyed(ServletContextEvent event)

    {

        ServletContext context = event.getServletContext();

        Counter counter = (Counter) context.getAttribute("counter");

        if (counter != null)

        {

           try

            {

               String filepath = context.getRealPath("/count/counter.txt");

               PrintWriter writer = new PrintWriter(filepath);

               writer.println(counter.getCount());

                writer.close();

            catch (Exception e){

                e.printStackTrace();

            }

        }

    }

 

    public void contextInitialized(ServletContextEvent event)

    {

        ServletContext context = event.getServletContext();

        try

        {

            BufferedReader reader = new BufferedReader(new 

            InputStreamReader(context.getResourceAsStream("/count/counter.txt")));

            int count = Integer.parseInt(reader.readLine());

            Counter counter = new Counter(count);

            context.setAttribute("counter", counter);

            reader.close();

        catch (Exception e){

            e.printStackTrace();

        }

    }

}

 

【注意】上面的程序正常运行,首先需要在文本应用的入口(/TestPro/WebRoot)目录下新建一个文件count/counter.txt文件。

 

0 0
原创粉丝点击