загрузка при запуске Tomcat - PullRequest
14 голосов
/ 20 июля 2010

Как я могу загрузить класс при запуске в Tomcat? Я видел тег load-on-startup для файла web.xml, но могу ли я его использовать и как мне написать свой класс?

РЕДАКТИРОВАТЬ: Как я могу реализовать этот класс и XML?

<servlet-name>??</servlet-name>
<servlet-class>??</servlet-class>
<load-on-startup>10</load-on-startup>

Ответы [ 4 ]

30 голосов
/ 20 июля 2010

Они предназначены для указания порядка загрузки сервлетов.Однако сервлеты больше предназначены для контроля, предварительной обработки и / или пост-обработки HTTP-запросов / ответов, в то время как вам больше нравится искать ловушку при запуске веб-приложения.В этом случае вам скорее понадобится ServletContextListener.

@WebListener
public class Config implements ServletContextListener {
    public void contextInitialized(ServletContextEvent event) {
        // Do your thing during webapp's startup.
    }
    public void contextDestroyed(ServletContextEvent event) {
        // Do your thing during webapp's shutdown.
    }
}

Если вы еще не используете Servlet 3.0 (и, следовательно, не можете использовать @WebListener), то вам необходимо вручную зарегистрировать его вweb.xml следующим образом:

<listener>
    <listener-class>com.example.Config</listener-class>
</listener>

См. Также:

4 голосов
/ 25 апреля 2016

Элемент load-on-startup указывает, что этот сервлет должен быть загружен (создан и инициализирован его init ()) при запуске веб-приложения .Содержимое элемента этого элемента должно быть целым числом, указывающим порядок, в котором должен быть загружен сервлет. Другими словами, контейнер загружает сервлеты в возрастающем целочисленном значении. Сначала будет загружено значение 0, затем 1, 2, 3 и т. Д.

Попробуем понять это на примере, приведенном ниже:

web.xml

<web-app>  
 ....  
  //=====================servlet 1==============
  <servlet>  
   <servlet-name>servlet1</servlet-name>  
   <servlet-class>com.javatpoint.FirstServlet</servlet-class>  
   <load-on-startup>0</load-on-startup>  //value given 0(zero)
  </servlet>  

  //=====================servlet 2==============
  <servlet>  
   <servlet-name>servlet2</servlet-name>  
   <servlet-class>com.javatpoint.SecondServlet</servlet-class>  
   <load-on-startup>1</load-on-startup>   //value given 1(one)  
  </servlet>  

 ...  
</web-app>  

Определено 2 сервлета, оба сервлета будут загружены во время развертывания проекта или запуска сервера.Но сначала будет загружен сервлет1, а затем сервлет 2.

Передача отрицательного значения: Если вы передадите отрицательное значение, сервлет будет загружен во время запроса, при первом запросе.

2 голосов
/ 29 июля 2013

enfix,

Ваш XML выглядит хорошо.

Вы должны поместить метод init () в ваш класс сервлета, который вызывается при загрузке вашего сервера. Методы doGet, doPost и do вызываются только при наличии входящего запроса.

public class YourServlet extends HttpServlet
{
    public void init()
    {
        //initialize( or add a log statement to debug)
    }
}
1 голос
/ 29 июля 2013

Это решение для Tomcat 7.0. Шаг 1. Создайте файл war для вашего webapp / servlets.Если вы используете Eclipse, выберите Файл-> Экспорт-> Веб-> WAR-файл и сохраните его в известном месте.

Шаг 2. Найдите домашнюю папку для вашего кота.Для этого перейдите в tomcat / apache-tomcat-7.0.41 / bin и выполните ./startup.sh. Это выведет пару имен глобальных переменных.Запишите один из них для CATALINA_HOME.

Шаг 3: Скопируйте файл war из шага 1 в CATALINA_HOME / webapps

Шаг 4: Затем создайте файл xml в CATALINA_HOME / conf / {Engine}/localhost/MyServlets.xml:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<Context deployOnStartup="true" docBase="/home/ubuntu/Downloads/apache-tomcat-7.0.42/webapps/" reloadable="true">
<Manager pathname=""/>
</Context>

Измените docBase так, чтобы он указывал на местоположение, куда вы скопировали файл войны на шаге 3.

Теперь вы можете перейти к tomcat / apache-tomcat-7.0.41 / bin и выполнить ./startup.sh.Ваши сервлеты будут автоматически запущены.Надеюсь, это поможет.

...