?

Log in

No account? Create an account

ru_java


ru.java

все о языке программирования java


Previous Entry Share Next Entry
Schedule in servlet
Снайпер
v_y_v wrote in ru_java
Прошу помощи в таком вопросе:
Есть Servlet, при инициализации он запускает таймер timer.schedule(actionclass,...) передавая ему некоторый actionclass, метод run которого и будет запускаться с заданным интервалом.
А вот как их этого Run запустить один из методов самого сервлета, т.е. получить доступ к методам и переменным?

  • 1
Точно так же, как любой другой метод любого другого класса вызывает любой метод любого инстанса любого другого класса. То есть вам так или иначе нужен инстанс вашего сервлета в инстансе вашего actionclass'а

Но есть у меня какое-то нехорошее ощущение... Вы не могли бы подробнее описать, что конкретно вы пытаетесь сделать и хотите получить?

Промежуточная авторизация, без БД.
Таймер нужен для logout-а автоматического.
Понимаю, что правильней написать сервер и связку сервлет-сервер, но это достаточно громоздко будет.

В инстансе сервлета нельзя хранить никакую информацию, связанную с какими-либо данными клиента. Нет никакой гарантии, что следующий запрос клиента будет выполнять тот же самый инстанс сервлета и что тот инстанс, который выполнял предыдущий запрос, будет ещё жив.

Более того, запрос от другого клиента с высокой вероятностью выполнится тем же инстансом, который выполнял запрос от первого клиента. И если в первом запросе вы проводили аутентификацию и сохраняли данные об этом в инстансе сервлета, то пройднной первым клиентом аутентификацией воспользуется второй клиент.

Для того, что вы хотите, существует специальный контейнер javax.servlet.http.HttpSession, инстанс которого доступен в сервлете через параметр HTTPServletRequest в методах get/put/etc

Сервлет контейнер обеспечивает сохранность сессии между запросами и связывание одной сессии с одним и только одним веб-клиентом.

При этом её протуханием можно управлять без введения дополнительных таймеров -- есть сешн таймаут, после которого сессия сбрасывается.

У меня промежуточная авторизация, а не прямая, поэтому привязка к клиенту сделана несколько по-иному. По поводу механизма работы контейнера я так ничего и ни нашел, пока работает без сбоев.
По javax.servlet.http.HttpSession видел но не пробовал.
Спасибо - буду теперь по поводу этого думать.
Прикрчивание таймаута сессии я смутно представляю себе в моем случае.

Ппц. Вы хоть читали спеку на сервлеты? Печально всё это...

А что Вы порекомендуете почитать по данному вопросу - понятное, а не задвинутое?
Пока ничего кроме простых вариантов работы с сервлетами я не нашел.

Для простых вещей вроде принять и обработать запрос вполне подойдут понятные форумы и небольшие куски кода примеров.
Вы же делаете совсем не то для чего были созданы сервлеты. Выше подсказали про javax.servlet.http.HttpSession я думаю этого вполне будет достаточно.

Однако "задвинутое" придётся по любому читать потому что спецификации на технологии Java стараются писать наиболее полными. И именно с них пишут реализации контейнеров.

Собственно ссылка:
http://jcp.org/aboutJava/communityprocess/mrel/jsr154/index2.html

PS: Вы упомянули термин "промежуточная авторизация". Мне сложно судить о суте задачи, но опять же существует множество различных стандартных механизмов авторизации. Как вариант например через web.xml + JAAS.

Спасибо за ссылку.
Да я понимаю, что я нарушаю концепцию, но разрастания бутерброда я еще больше боюсь.

  • 1