java项目中,每新建一次会话,访问量加1

本文介绍了一种利用自定义监听器实现网站访问统计的方法。通过在web.xml配置监听器并结合Spring框架注入统计数据服务,每当创建新的HTTP会话时,系统将自动更新访问计数并保存到数据库。

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

1.在web.xml文件加入如下段代码,其中AccessCountListener.java是自己定义的监听器
<listener>
 <listener-class>com.cfets.imix.util.AccessCountListener</listener-class>
</listener>
3.在applicationContext-ioc.xml文件中添加如下段代码
<bean id="accessCountListener" class="com.cfets.imix.util.AccessCountListener">
  <property name="statisticsDataService" ref="statisticsDataService"></property>
 </bean>
 
2.每新建一次会话,访问量加1     【注:要实现HttpSessionListener接口
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.cfets.imix.pojo.StatisticsData;
import com.cfets.imix.service.StatisticsDataService;

public class AccessCountListener implements HttpSessionListener{
 final Logger log = LoggerFactory.getLogger("AccessCountListener");
 private static int count;
 private StatisticsDataService statisticsDataService;
 private ApplicationContext appContext = null;
 
 public AccessCountListener(){
           count = 0;
 }
//每新建一次会话,就会调用一次此方法
  public void sessionCreated(HttpSessionEvent se) {
    count = count + 1;
    //如果配置文件没有加载,则重新获取
    if(appContext == null){
              HttpSession session = se.getSession();
              ServletContext servletCxt = session.getServletContext();
              appContext = WebApplicationContextUtils.getWebApplicationContext(servletCxt);
     }
     accessCount(appContext);
 }
 
//session被销毁时调用,在此不做任何操作
 public void sessionDestroyed(HttpSessionEvent arg0) {
 }

 public  void accessCount(ApplicationContext appContext){
  try{
   //获取配置文件中id为accessCountListener的bean
  AccessCountListener acl = 
                  (AccessCountListener) appContext.getBean("accessCountListener");
   StatisticsDataService statisticsDataService  =  acl.getStatisticsDataService();
 
   Date date = new Date();
   SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
   String todayDate = sdf1.format(date);
   
   int queryResult =  statisticsDataService.queryByDateAndName(todayDate, "访问量");
   if(queryResult == 0){
             StatisticsData sd = new StatisticsData();
             sd.setDate(todayDate);
             sd.setName("访问量");
             sd.setCount(1);
             statisticsDataService.saveStatisticsData(sd);
   }else if(queryResult == 1){
           int countByCon = statisticsDataService.queryCountByDateAndName(todayDate, "访问量");
           statisticsDataService.updateStatisticsData(todayDate, "访问量", countByCon+1);
            statisticsDataService.queryCountByDateAndName(todayDate, "访问量");
   }
 }catch(Exception e){
             log.error("统计访问量数据出错!", e);
 }
 }
 
 
 public StatisticsDataService getStatisticsDataService() {
  return statisticsDataService;
 }
 public void setStatisticsDataService(StatisticsDataService statisticsDataService) {
  this.statisticsDataService = statisticsDataService;
 }
 public static int getCount() {
  return count;
 }
 public static void setCount(int count) {
  AccessCountListener.count = count;
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值