html网站统计来访人数,实现网站访问人数统计

本文介绍了如何在Java Web应用中使用ServletContext来统计网站访问人数。通过实现ServletContextListener接口并在上下文初始化和销毁时操作全局存储的计数器,实现了访问计数的持久化。在销毁时将ServletContex中的计数器值保存到文件,初始化时从文件读取并设置到ServletContext。此外,展示了对应的HTML页面和实体类Counter的简单实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我需要一个能访问网站人数的功能,那莫具体来讲就是需要一个能全局存储的,在 java web 中 为啥不用session 因为他代表的试一次会话是一种局部存储, 所以用 servletContext 存储更加合适因为他是全局的, 可以实现ServletContextListener 接口重写里面的2个方法

如果你没懂我说的他们之前区别可以看看

contextDestroyed(ServletContextEvent arg0)

contextInitialized(ServletContextEvent arg0)

在初始化中可以读取我存储在磁盘文件那个文件获取个数 因为如果不存储的话 服务器停止他也会没有了

在销毁的方法中我可以拿到存储在servletcontext中的个数并存储在文件中,这样就可以实现存储保存了

当然这边的方法是多种的你愿意存储在哪就存在哪,数据库 其他都可以

废话了那莫多开始 coding 吧

首先自定义一个我自己的监听器,然后重写2个方法,销毁的方法中是存储在磁盘的路径你可以任意指定,但是你存储在WEN-INF/classes 中他会报没有访问权限的错误

package com.listener;

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import javax.servlet.ServletContext;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener {

@Override

public void contextDestroyed(ServletContextEvent arg0) {

// TODO Auto-generated method stub

System.out.println("推出");

ServletContext sc = arg0.getServletContext();

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

if(counter!=null) {

//String filepath = s

try {

//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter())

//PrintWriter pw = new PrintWriter("/count.txt");

PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("D:\\develop\\apache-tomcat-7.0.67\\webapps\\test\\WEB-INF\\classes\\count.txt")));

pw.println(counter.getCounter());

pw.flush();

pw.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

@Override

public void contextInitialized(ServletContextEvent arg0) {

// TODO Auto-generated method stub

System.out.println("进入");

ServletContext sc = arg0.getServletContext();

System.out.println(sc.getResourceAsStream("/WEB-INF/classes/count.txt"));

BufferedReader br = new BufferedReader(new InputStreamReader(sc.getResourceAsStream("/WEB-INF/classes/count.txt")));

try {

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

br.close();

sc.setAttribute("counter", new Counter(count));

} catch (NumberFormatException | IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

然后就是页面了

pageEncoding="UTF-8" import="com.listener.*"%>

Insert title here

Counter count = (Counter) this.getServletContext().getAttribute("counter");

count.setCounter(count.getCounter() + 1);

this.getServletContext().setAttribute("counter", count);

%>

实体类

package com.listener;

public class Counter {

private int counter;

public void setCounter(int counter) {

this.counter = counter;

}

public int getCounter() {

return counter;

}

public Counter(int counter) {

// TODO Auto-generated constructor stub

this.counter = counter;

}

}

最后不要忘了在web.xml 中配置listener 中让我们自定义的起作用

com.listener.MyListener

Archetype Created Web Application

本人不才,希望大神提出指导意见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值