Нет, он не вызывается в каждом запросе. Он вызывается только во время инициализации сервлета, что обычно происходит только один раз за время существования веб-приложения. Также см. этот ответ для получения более подробной информации о том, как создаются и выполняются сервлеты.
Если вы действительно хотите выполнить некоторую глобальную инициализацию или инициализацию в масштабе всего приложения (которая, таким образом, сама по себе не привязана только к конкретному сервлету), вы обычно используете для этого ServletContextListener
. Вы можете выполнить инициализацию в методе contextInitialized ()
.
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class Config implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
// Do stuff during webapp's startup.
}
public void contextDestroyed(ServletContextEvent event) {
// Do stuff during webapp's shutdown.
}
}
Если вы еще не используете Servlet 3.0
и не можете выполнить обновление и, следовательно, не можете использовать аннотацию @WebListener
, то вам необходимо вручную зарегистрировать его в ] /WEB-INF/web.xml
как показано ниже:
<listener>
<listener-class>com.example.Config</listener-class>
</listener>
init ()
вызывается только при создании сервлета. Это может происходить несколько раз в течение срока службы сервера. Вы используете его для инициализации любых переменных или логики, необходимых для регулярного использования сервлета.
Изменить: После перечитывания вашего сообщения он технически не вызывается с каждым запросом, потому что сервер создает новый экземпляр сервлета для каждого запроса. Проверьте настройки вашего сервера, чтобы узнать, получит ли он новый сервлет или оставить один сервлет в течение всего срока службы сервера.
Вы ищете ServletContextListener?
Как мне запустить метод перед повторной публикацией в JBoss?