#servlets
#сервлеты
Вопрос:
Как я могу выгрузить сервлет из его контейнера, используя конструктор сервлета или метод init ()?
Если я выгружу его с помощью конструктора сервлета, будет ли по-прежнему вызываться метод init ()?
Должен ли я выдать исключение? Если да, то проверено или время выполнения?
Комментарии:
1. Что вы подразумеваете под «выгрузкой»? Что вы пытаетесь сделать?
2. Я хочу, чтобы контейнер выгружал сервлет, чтобы при вводе URL-адреса я получал сообщение об ошибке недоступности.
3. Я почти уверен, что вы не можете динамически удалять / выгружать сервлеты. Вы можете добавлять / загружать их с помощью
ServletContext
методов. Почему вы не можете просто закомментировать части web.xml или закомментировать@WebServlet
аннотации, а затем повторно развернуть?4. что произойдет, если я вызову метод destroy?? будет ли он выгружен или для объекта будет вызван просто метод
5.
destroy()
это для контейнера, который должен вызывать, а не вы. Это не волшебство, это просто способ для вас подключиться к жизненному циклу сервлета. Итак, как вы сказали, если вы вызываетеdestroy()
, вы просто вызываете метод для объекта, не более того.
Ответ №1:
Простое создание исключения в конструкторе сервлета или init()
методе предотвратит его использование в отображении сервлета servletcontainer.
Вы не сможете выгрузить его позже, когда он уже будет успешно сконструирован и инициализирован. Лучшее, что вы можете сделать, это просто создать исключение в любом из методов HTTP на основе некоторого условия.
Однако правильный подход зависит от единственного функционального требования. Скорее всего, сервлет вам вообще не нужен. Просто потому, что желание выгружать его вручную технически лишает дизайн полного смысла.
Ответ №2:
если мы вызываем destroy() для сервлета, то это не означает, что наш сервлет будет выгружен / уничтожен. Он просто вызывает destroy, оставляя сервлет нетронутым, не причиняя никакого вреда экземпляру сервлета. Он все еще жив, потому что вы вызвали метод destroy. Это не контейнерный механизм, который вызывает метод destroy.
когда контейнер решает уничтожить / выгрузить экземпляр сервлета из памяти, тогда контейнер запускает механизм уничтожения, и метод destroy является одним (наряду с несколькими шагами) из шагов механизма уничтожения. Механизм уничтожения дает возможность пользователю / разработчику очистить ресурсы, которые были инициализированы во время создания / инициализации экземпляра.