Можно ли использовать загрузку при запуске в web.xml для загрузки произвольного класса при запуске?

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

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

person enfix    schedule 20.07.2010    source источник


Ответы (4)


Они предназначены для указания порядка загрузки сервлетов. Тем не менее, сервлеты больше предназначены для управления, предварительной обработки и/или постобработки 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>

Смотрите также:

person BalusC    schedule 20.07.2010
comment
Если я хочу запустить свое приложение с определенным сервлетом (который не может быть статической страницей), это единственный способ? Я бы использовал ваш ContextListener с форвардом? - person lony; 24.05.2012

Элемент 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.

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

person Jaimin Patel    schedule 25.04.2016

закрепить,

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

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

public class YourServlet extends HttpServlet
{
    public void init()
    {
        //initialize( or add a log statement to debug)
    }
}
person Isaq    schedule 29.07.2013
comment
Это лучший ответ здесь, потому что с целым числом загрузки при запуске вы можете контролировать это, например. ваш сервлет запускается после всех других сервлетов с загрузкой при запуске. Если вам все равно, следует использовать ServletContextListener, который запускается перед всеми этими запускаемыми сервлетами. - person koem; 11.08.2015

Это решение для Tomcat 7.0. Шаг 1: Создайте военный файл для вашего веб-приложения/сервлета. Если вы используете Eclipse, файл File->Export->Web->WAR и сохраните его в известном месте.

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

Шаг 3. Скопируйте файл войны из шага 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. Ваши сервлеты будут запущены автоматически. Надеюсь это поможет.

person Priyank Desai    schedule 29.07.2013