【问题标题】:How to manage time in java servlet?如何在 java servlet 中管理时间?
【发布时间】:2017-02-08 19:13:57
【问题描述】:

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

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

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

我曾尝试在 HTTpServelt 中使用 TimerTask,但收到拒绝访问的错误。

【问题讨论】:

  • 问题很难理解,给一些细节,你做了什么?
  • @BalusC 我怀疑它是重复的,TimerTaks 不是用于测量而是用于调度。虽然我同意很难说出实际的问题是什么。
  • 抱歉没有说得更清楚。基本上我想运行我的 servlet 2-3 分钟然后停止,但我不想在这里使用 cron 作业
  • @vickydhudasiya 编辑你的问题,澄清而不是发表评论。
  • @Basil Bourque 我已经编辑了这个问题.. 请让我知道您对此有何看法

标签: java servlets


【解决方案1】:

您的问题不清楚。您可能不完全了解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 );

此外,您可以通过在该会话对象上调用 invalidate 以编程方式关闭会话,例如 discussed 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() );

【讨论】:

  • 非常感谢您的回复。这个回答确实帮助我理解了一些servlet概念
猜你喜欢
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多