2017-02-08 9 views
-3

Аукционный сервлет - Это сервлет Java, который ждет 2-3 минуты после того, как первый пользователь сделал запрос. Мне нужно отслеживать время в моем сервлете. так, когда время заканчивается, используя определенную логику было бы отправить ответ некоторым пользователям ...Как управлять временем в Java-сервлете?

Пример: позволяет сказать, что мои 10 пользователей отправив запрос на мой аукцион сервлета, и я хочу, чтобы проверить, что 2 Прошло 3 минуты с тех пор, как первый пользователь сделал запрос

и когда время заканчивается, используя некоторую логику, я хочу отправить ответ моим пользователям через 2-3 минуты.

Я попытался использовать TimerTask в HTTpServelt, но получил ошибку доступа.

+1

Вопрос трудно понять, дать некоторые подробности, что вы сделали? –

+0

@BalusC Я сомневаюсь, что это дубликат, TimerTaks не предназначен для измерения, а для планирования. Хотя я согласен, трудно сказать, каков фактический вопрос. –

+0

извините за то, что он не стал более понятным. В принципе, я хотел бы запустить свой сервлет на 2-3 минуты, а затем остановиться, но я не хочу использовать работу cron здесь –

ответ

0

Ваш вопрос непонятен. Возможно, вы не можете полностью понять, как работает технология Java Servlet.

Сервлет - это класс, который загружается с первого запроса клиентом (веб-браузер и т. Д.) Или предварительно загружается при запуске servlet container. Поток назначается для обработки каждого входящего запроса для генерации исходящего ответа. Обычно объект сервлета не останавливается при запуске, пока контейнер сервлета не закроется. Вы должны понимать, что один сервлет сервлетов обрабатывает многие циклы запросов-ответов многими пользователями. Подробнее discussion here.

Сессия запускается для каждого индивидуального набора циклов запроса-ответа. Каждый сеанс представлен объектом HttpSession. Автоматический тайм-аут сеансов, если пользователь перестает делать запросы. Реализации обычно по умолчанию составляют полчаса до тайм-аута. Вы можете настроить это значение по умолчанию. Это, вероятно, решение, которое вы ищете, но я не уверен, учитывая отсутствие ясности в вашем вопросе. Вызовите setMaxInactiveInterval на этом объекте сеанса.

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

Кроме того, вы можете программно закрыть сессию, вызвав invalidate на этот объект сессии, в discussed here.

Вы можете запросить время начала этого сеанса как счет миллисекунд с эпохи 1970 UTC, позвонив по номеру getCreationTime.

long millisSinceEpoch = someHttpSession.getCreationTime(); 

Сделать Instant от этого, чтобы увидеть этот момент в UTC.

Instant instantSessionStarted = Instant.ofEpochMilli(millisSinceEpoch); 

Используйте Duration объект для просмотра прошедшего времени. На текущий момент звоните Instant.now.

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

Большое спасибо за ваш ответ .. Этот ответ действительно поможет мне понять некоторые концепции сервлетов –