对此的任何帮助将不胜感激。
P.S。我实现计时器的方式不仅仅是Java语言。我没有使用javascript争吵,但不知道如何在没有计数器重置的情况下将其实现为多个页面。
答案 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中进行线程化可能会很危险。