Доступ к экземпляру сервлета - PullRequest
8 голосов
/ 02 ноября 2010

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

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

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

Ответы [ 3 ]

6 голосов
/ 02 ноября 2010

До Servlet 2.1 (уже более десяти лет) вы могли бы использовать ServletContext#getServlet() для этого. Это однако устарело с тех пор. Просто потому, что это плохой дизайн. Если вы хотите вызвать другой сервлет из сервлета в цепочке запрос-ответ, просто используйте RequestDispatcher#include(). Если вы хотите вызывать не сервлет-специфичные методы другого сервлета, тогда просто пора преобразовать этот код в отдельный класс Java, который затем вы сможете импортировать / использовать в обоих сервлетах.

2 голосов
/ 02 ноября 2010

Контейнер создает ТОЛЬКО ОДИН экземпляр экземпляра сервлета и использует один и тот же экземпляр для обслуживания нескольких запросов. Существует «SingleThreadModel», который, если вы реализуете, контейнер будет создавать несколько экземпляров сервлета, но это устарело.

0 голосов
/ 02 ноября 2010

Не через стандартный Servlet API (поэтому ответ - нет).

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

Однако в контейнере сервлета может быть установлен SecurityManager, запрещающий использование указанных мерзких приемов (так что ответ может быть).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...