Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с сервлетами, Обращение одного сервлета к другому 
:(
    Опции темы
3,14
Дата 10.11.2004, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



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


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Domestic Cat
Дата 10.11.2004, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172





--------------------

PM   Вверх
3,14
Дата 11.11.2004, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Мне как раз нужно что-нить вроде:
Код

MyServlet ms=(MyServlet)  getServletConfig().getServletContext().getServlet("myname");

а он depricated smile
RequestDispatcher не пдходит, потомучто там нужно не forward-ить request, а именно достучаться до методов одного сервлета из другого


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Domestic Cat
Дата 11.11.2004, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Ну так просто создай инстанс сервлетa и вызывай егo методы. Или я нe так понял ?


--------------------

PM   Вверх
3,14
Дата 12.11.2004, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Не, это не подойдёт. Ситуация такая
Сервлет 1: обрабатывает HTTP запросы
Сервлет 2: обеспечивает связь с некой удалённой БД (проверяет через некие отрезки времени если соединения нет, то пытается поднять его). Так же содержит простейшие API для работы с этой БД.

Дак вот ситуцаия такая - из сервлета 1 нужно обратиться к БД через сервлет 2. Инстанс создавать нельзя потомучто нужно обратиться именно к тому что торчит в памяти, потомучто он соединён с БД.


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Nobody
Дата 12.11.2004, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 25.8.2003
Где: Россия, Москва

Репутация: 1
Всего: 16



Я бы переделал архитектуру приложения. Например, зарегистрировал DataSource в JNDI.


--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 12.11.2004, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Но в память можно положить обычный класс, прицепив его к ServletContext. Тогда этот инстанс можно будет получать откуда угодно через getAttribute.

Если нужно чтобы это все-таки был сервлет, можно использовать URLConnection.


--------------------

PM   Вверх
3,14
Дата 12.11.2004, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Цитата(Nobody @ 12.11.2004, 16:20)
Я бы переделал архитектуру приложения.

Это не реально, сделать этого мне не дадут

Цитата(Domestic @ 12.11.2004, 16:22)
Но в память можно положить обычный класс, прицепив его к ServletContext.
Если я правильно понял, то сервлет 2 просто цепляет к ServletContext-у, а сервлет 1 его оттуда достаёт? smile

Цитата(Domestic @ 12.11.2004, 16:22)
Если нужно чтобы это все-таки был сервлет, можно использовать URLConnection.
Это не то, через него как я понимаю нельзя обратиться к методам класса smile


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
3,14
Дата 12.11.2004, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Может где есть API по Tomcat-овским библиотекам, думаю что через них это должно решаться элементарно


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Domestic Cat
Дата 12.11.2004, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Цитата
Это не то, через него как я понимаю нельзя обратиться к методам класса


Но раз это сервлет, то предполагается, что он должен обрабатывать POST/GET реквесты?


--------------------

PM   Вверх
3,14
Дата 12.11.2004, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Понятно что doGet, doPost, service сработают, но еть не то. Попробую обьяснить по подробней:
На сайт понадобилось добавить возможность дёргать данные из удалённой БД. Делается еть так: открывается TCP сокет к хосту БД, в сокет записывается ряд команд (ничего общего с SQL) и оттуда в ответ приходят данные. Простейшая имплементация этого элементарна, но проблема в том что каждый раз создавать сокет заново и авторизоваться слишком долго, поэтому желательно чтоб к моменту клиентского запроса сокет уже бы был открыт. Хранить сам сокет в основном сервлете (сервлет 1) плохо по следующей причине : в случае падение конекта (а если он упадёт то в лучшем случае появится минут через 10) при каждой попытке прочитать что-то из БД пользователем придётся пытаться конектиться по новой, что будет сильно тормозить систему. Для обхода этой проблемы я решил создать отдельный сервлет (сервлет 2), который каждые n-минут проверяет не упал ли конект, а если упал то пытается поднять. А сервлет 1 просто пользуется открытым сервлетом 2 конектом.



--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Domestic Cat
Дата 12.11.2004, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Но ведь можно создать объект класса (не сервлета), который будет этим заниматься; грузить его при загрузке приложения, подцепляя к контексту этого приложения. Оттуда он будет доступен всем сервлетам.


--------------------

PM   Вверх
3,14
Дата 12.11.2004, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



А как сделать чтоб он автоматически через нек-ие переоды времени проверял доступна связь или нет?


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Domestic Cat
Дата 12.11.2004, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



так же, как бы ты сделал для любого другого обычного класса - запусти тред / таймер.


--------------------

PM   Вверх
3,14
Дата 12.11.2004, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



В какой процедуре его запускать, не в service-е же? Обьясни пжайлуста, ато я совсем с этим не знаком smile


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0867 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.