Java 使用servlet的命中计数器方法

Java 使用servlet的命中计数器方法,java,servlets,scheduled-tasks,servlet-filters,hitcounter,Java,Servlets,Scheduled Tasks,Servlet Filters,Hitcounter,我想使用Javaservlet在我的数据库中创建一个命中计数器寄存器。其主要思想是使用过滤器,并在每次用户访问时增加计数器 我不想在每次访问时都在数据库中进行更新(我发现这不是很有效)。我更喜欢使用一个静态变量,每次访问都会增加,在一天结束时,用该变量的值插入DB并将其重置为零 我怎么能这么做?我不知道如何安排一个帐户,它会告诉我的应用程序每午夜进行一次插入并重置变量 有什么想法吗 谢谢!:) 您可以使用java.util.Timer Timer t = new Timer("myTim

我想使用Javaservlet在我的数据库中创建一个命中计数器寄存器。其主要思想是使用过滤器,并在每次用户访问时增加计数器

我不想在每次访问时都在数据库中进行更新(我发现这不是很有效)。我更喜欢使用一个静态变量,每次访问都会增加,在一天结束时,用该变量的值插入DB并将其重置为零

我怎么能这么做?我不知道如何安排一个帐户,它会告诉我的应用程序每午夜进行一次插入并重置变量

有什么想法吗


谢谢!:)

您可以使用
java.util.Timer

    Timer t = new Timer("myTimer");
    t.schedule(new TimerTask() {

        @Override
        public void run() {
            if (count != lastCount) {
                count = lastCount;
                // TODO: update into database
            }
        }
    }, 0, 2000);

您可以使用
java.util.Timer

    Timer t = new Timer("myTimer");
    t.schedule(new TimerTask() {

        @Override
        public void run() {
            if (count != lastCount) {
                count = lastCount;
                // TODO: update into database
            }
        }
    }, 0, 2000);

在长时间搜索解决方案后,我发现计时器在servlet中工作得不好,所以我使用了这个(效果很好):)这是过滤器的代码:

public class LogVisitorsListener implements ServletContextListener {

    private ScheduledExecutorService scheduler;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        scheduler = Executors.newSingleThreadScheduledExecutor();

        // It will be executed every 1 hour
        scheduler.scheduleAtFixedRate(new DailyHitsRunnable(), 0, 1, TimeUnit.HOURS); 
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        scheduler.shutdownNow();
    }
}
我的班级每天都会打不响:

public class DailyHitsRunnable implements Runnable {
@Override
    public void run() {
        try {
            // stuff here...
        } 
        catch(Throwable t) {
            // catch work here...
        }
    }
}
使用try/catch来避免在某些操作失败时停止可运行操作是非常重要的


问候

在长时间搜索解决方案后,我发现计时器不能很好地与servlet配合使用,所以我使用了这个(而且效果很好):)这是过滤器的代码:

public class LogVisitorsListener implements ServletContextListener {

    private ScheduledExecutorService scheduler;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        scheduler = Executors.newSingleThreadScheduledExecutor();

        // It will be executed every 1 hour
        scheduler.scheduleAtFixedRate(new DailyHitsRunnable(), 0, 1, TimeUnit.HOURS); 
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        scheduler.shutdownNow();
    }
}
我的班级每天都会打不响:

public class DailyHitsRunnable implements Runnable {
@Override
    public void run() {
        try {
            // stuff here...
        } 
        catch(Throwable t) {
            // catch work here...
        }
    }
}
使用try/catch来避免在某些操作失败时停止可运行操作是非常重要的


问候

你试过什么吗?当然。除了执行插入和重置操作的说明之外,我已经完成了所有操作。这就是我不知道怎么做的(日程安排)。这可能会有帮助:谢谢。但我认为我需要在代码内部完成,而不是使用外部应用程序。你尝试过什么吗?当然。除了执行插入和重置操作的说明之外,我已经完成了所有操作。这就是我不知道怎么做的(日程安排)。这可能会有帮助:谢谢。但我认为我需要在代码内部完成,而不是使用外部应用程序。谢谢!:)问题是Timer类不能很好地与servlet一起工作。谢谢!:)问题是计时器类不能很好地与servlet一起工作。