倒数计时器通过多个jsp页面

时间:2011-03-14 22:04:05

标签: java javascript jsp servlets jsp-tags

嘿,我正在使用servlets / jsps开发一个在线测试,并且想知道如何创建一个从6分钟倒计时的计时器,一旦它达到零,测试就会结束。 java中是否有可以使用的计时器类?如果是,我将如何在jsp页面中实现它?

对此的任何帮助将不胜感激。

P.S。我实现计时器的方式不仅仅是Java语言。我没有使用javascript争吵,但不知道如何在没有计数器重置的情况下将其实现为多个页面。

5 个答案:

答案 0 :(得分:3)

你可以走这条路:

测试开始时,将开始时间放在用户的会话中。之后,每次显示处理测试的页面时,请确保您有一个将在这些页面中使用的公共部分。

在这一部分,每次点击一个页面,使用jsp / servlets,你可以“推”剩余的剩余时间,并使用类似JavaScript countdown之类的东西,你可以优雅地显示剩余时间而不用该计数器重置自己。

答案 1 :(得分:0)

无论是什么触发了计时器的启动,你都可以(完全在servlet中)创建一个带有计时器的线程,该计时器还有一个用于测试的关闭钩子。

void myTestCaseThatStartsTimer() {

    // inline class - actually legal in Java
    class TestShutdownHook implements Runnable {
        Test test;
        TestShutdownHook(Test test) { this.test = test; }
        public void run() {
            Thread.sleep(1000 * 60 * 6); // 6 minutes, catch it's InterruptedException...
            test.triggerShutdown();
        }
    }
    Threat hook = new Thread(new TestShutdownHook(this));
    hook.start();

    // rest of test here


}

答案 2 :(得分:0)

您可以在页面中使用JavaScript中的计数器,并使用AJAX加载测试的后续步骤,以避免刷新整个页面。

或者您可以在表单中放置一个隐藏的“timerCurrentValue”字段,每秒更新一次JavaScript时间,并在测试的每一步提交,以便下一页以此给定值重新启动时间。

答案 3 :(得分:0)

最简单的解决方案是将超时值存储在用户的会话中。然后,您可以在页面中插入JavaScript超时,或在生成的HTML中使用刷新标记(在此处用计算的超时替换0:

<meta http-equiv="Refresh" CONTENT="0; URL=/timeout.jsp"/>

当然,这不是非常安全。因此,您需要在服务器上备份它,并检查任何提交结果的超时。而且您需要确保用户不能简单地开始新会话。

答案 4 :(得分:0)

你必须在javascript中运行计时器客户端,因为当计时器启动时,jsp页面/ servlet无法通知客户端。我建议如下:启动一个javascript计时器(在页面加载时使用setTimeout),当他们提交答案时也发送问题的开始时间,这样你就可以计算他们离开的时间,如果计时器去了关闭,使用javascript通知他们(以及服务器点击时)测试结束。

Java确实有一个java.util.Timer类,但我认为它不会提供您想要的用户体验,并且在servlet中进行线程化可能会很危险。