сервлеты java инициализируются и уничтожаются

#java #servlets

#java #сервлеты

Вопрос:

servlets использует init() для инициализации состояния сервлетов и уничтожения для очистки. Есть ли специальное имя класса, которое нам нужно для ввода init() и destroy()? Как сервлеты узнают, где найти эти методы?

asp.net имеет глобальный.asax для обработки аналогичной вещи в asp.net у servlets есть специальный класс для выполнения того же самого?

Спасибо

Ответ №1:

Сервлеты в конечном итоге будут подклассом javax.servlet.Servlet класса, который определяет эти методы.

Комментарии:

1. итак, я могу поместить эти два метода в любой из моих классов servlets и просто поместить один раз, сервер JVM или tomcat посмотрит, где находятся эти два метода?

2. Правильно, контейнер сервлета получит доступ к вашему классу как объекту сервлета и вызовет эти методы для вас.

Ответ №2:

Он должен быть в том же классе, что и ваш класс Servlet.

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

Комментарии:

1. но для чего у меня есть куча сервлетов класса? В какой класс я должен поместить эти два метода?

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

3. @icn, вы бы реализовали init() в любых классах сервлетов, в которых вы хотите иметь специальную логику инициализации

4. итак, даже если я переопределяю эти два метода в одном из моих очень часто запрашиваемых классов сервлетов, веб-сервер / JVM гарантирует, что эти два метода будут запущены только один раз?

5. @icn да. Жизненный цикл обрабатывается контейнером сервлетов (catalina и т.д.). Вам не нужно ничего делать вручную.

Ответ №3:

Сервлеты развертываются в контейнере (веб-сервер / сервер приложений), этот контейнер позаботится об инициализации или уничтожении сервлетов, и у нас нет предопределенных классов для инициализации и уничтожения сервлетов, если мы используем определенный класс, это означает, что мы зависим от этого класса (тесная связь), который не рекомендуется. Теперь мы используем классы GenericServlet и HttpServlet для этих методов .. один раз обратитесь к J2EE API и найдите в них эти классы и методы..

Ответ №4:

JVM, которая запускает сервлет, ищет эти методы только в классах, которые расширяют Servlet or HttpServlet .

Ответ №5:

Сервлеты являются управляемыми объектами. Это означает, что они выполняются внутри контейнера, который управляет их жизненными циклами (создает экземпляры сервлетов, вызывает их соответствующие методы, когда это уместно, и освобождает их). Контейнер (Tomcat, Glassfish, …) знает, когда вызывать эти методы в нужное время, потому что это реализовано таким образом, в этом нет ничего особенного.

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