#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() во время уничтожения. Однако эта ошибка была бы быстро исправлена.