如何在java servlet中管理时间?

时间:2017-02-08 19:13:57

标签: java servlets

拍卖servlet - 这是一个java servlet,在第一个用户发出请求后等待2-3分钟。所以我需要跟踪我的servlet中的时间。 所以当时间结束使用某些逻辑时,它会向某些用户发送响应...

示例: 假设我的10个用户正在向我的拍卖servlet发送请求,我想检查一下,自第一个用户提出请求以来已经过了2-3分钟

当时间结束时,使用一些逻辑我想在2-3分钟后向我的一些用户发送响应。

我曾尝试在HTTpServelt中使用TimerTask但是出现拒绝访问错误。

1 个答案:

答案 0 :(得分:0)

您的问题不明确。您可能无法完全理解Java Servlet技术的工作原理。

Servlet是一个在客户端(Web浏览器等)第一次请求时加载或在servlet container启动时预加载的类。分配一个线程来处理每个传入请求以生成传出响应。通常, servlet对象在启动后不会停止运行,直到servlet容器关闭。您必须了解单个servlet对象servlet可以处理许多用户的许多请求 - 响应周期。查看更多discussion here

为每个用户的请求 - 响应周期集启动会话。每个会话由HttpSession对象表示。如果用户停止发出请求,会话将自动超时。实施通常默认为半小时,直到超时。您可以调整该默认值。这可能是您正在寻找的解决方案,但我不确定您的问题是否缺乏明确性。在该会话对象上调用setMaxInactiveInterval

int seconds = TimeUnit.MINUTES.toSeconds( 3 ) ;  // Three minutes converted to a number of seconds.
someHttpSession.setMaxInactiveInterval( seconds );

此外,您可以通过调用该会话对象上的invalidatediscussed here编程方式关闭会话。

您可以通过调用getCreationTime,将该会话的开始时间作为自1970年UTC世纪以来的毫秒计数。

long millisSinceEpoch = someHttpSession.getCreationTime();

从中获取Instant以查看UTC中的那一刻。

Instant instantSessionStarted = Instant.ofEpochMilli( millisSinceEpoch );

使用Duration对象查看已用时间。目前,请致电Instant.now

Duration durationOfThisSession = Duration.between( instantSessionStarted , Instant.now() );