Vraag load-on-start-up Tomcat


Hoe kan ik een klasse laden bij het opstarten in Tomcat? ik zag load-on-startup tag voor web.xml bestand, maar kan ik het gebruiken en hoe moet ik mijn klas schrijven?

EDIT: Hoe kan ik deze klasse en XML implementeren?

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

14
2017-07-20 12:11


oorsprong


antwoorden:


Die zijn bedoeld om de laadvolgorde voor servlets te specificeren. Servlets zijn echter meer bedoeld om HTTP-aanvragen / -responsen te controleren, preprocessen en / of nabewerken terwijl u klinkt alsof u meer op zoek bent naar een haak bij het opstarten van webapps. In dat geval wil je liever een 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.
    }
}

Als je nog geen Servlet 3.0 hebt (en dus niet kunt gebruiken @WebListener), dan moet je het handmatig registreren in web.xml als volgt:

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

Zie ook:


30
2017-07-20 12:16



Het element load-on-startup geeft aan dat deze servlet moet worden geladen (geïnstantieerd en zijn init () wordt aangeroepen) bij het opstarten van de webtoepassing. De elementinhoud van dit element moet een geheel getal zijn dat de volgorde aangeeft waarin de servlet moet worden geladen. Met andere woorden, container laadt de servlets in oplopend geheel getal. De waarde 0 wordt eerst geladen dan 1, 2, 3 enzovoort.

Laten we proberen het te begrijpen aan de hand van het onderstaande voorbeeld:

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>  

Er zijn 2 servlets gedefinieerd, beide servlets worden geladen op het moment van projectimplementatie of serverstart. Maar servlet1 wordt eerst geladen en vervolgens servlet2.

Negatieve waarde doorgeven:  Als u de negatieve waarde doorgeeft, wordt de servlet op verzoek op eerste verzoek geladen.


4
2018-04-25 09:13



enfix,

Je XML ziet er goed uit.

U moet een init () -methode in uw servletklasse plaatsen, die wordt aangeroepen wanneer uw server opstart. doGet, doPost en doen methoden worden alleen aangeroepen als er een binnenkomend verzoek is.

public class YourServlet extends HttpServlet
{
    public void init()
    {
        //initialize( or add a log statement to debug)
    }
}

2
2017-07-29 06:38



Dit is de oplossing voor Tomcat 7.0 Stap 1:   Maak oorlogsbestand voor uw webapp / servlets.   Als u Eclipse, Bestand-> Export-> Web-> WAR-bestand gebruikt en deze op een bekende locatie opslaat.

Stap 2:   Ontdek de thuismap voor uw tomcat.   Ga daarvoor naar tomcat / apache-tomcat-7.0.41 / bin en voer ./startup.sh uit   Hiermee worden enkele globale variabelenamen afgedrukt.   Noteer degene voor CATALINA_HOME.

Stap 3:   Kopieer het oorlogsbestand vanaf stap 1 in CATALINA_HOME / webapps

Stap 4:   Maak vervolgens een XML-bestand aan in 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>

Wijzig docBase zodat deze naar locatie verwijst waar u het oorlogsbestand in stap 3 hebt gekopieerd.

Nu kun je gaan naar tomcat / apache-tomcat-7.0.41 / bin en uitvoeren ./startup.sh. Uw servlets worden automatisch gestart. Ik hoop dat dit helpt.


1
2017-07-29 06:18