2016-05-29 10 views
2

Ich habe eine Webanwendung mit Jersey und Maven erstellt, und ich möchte Code ausführen, wenn der Server gestartet wird, nicht wenn eine Funktion aufgerufen wird.Erstellen Sie eine Hauptmethode in einer Jersey-Webanwendung

@Path("/Users") 
public class User { 

    public static void main(String[] args) throws InterruptedException {  
      System.out.println("Main executed"); 
      //I want to execute some code here 
    } 

    @GET 
    @Path("/prof") 
    @Produces(MediaType.APPLICATION_JSON) 
    public List<String> getFile(@QueryParam("userid") String userid, { 

Aber die main Methode nie ausgeführt wird, sehe ich nie den Ausgang Main executed. Ich habe auch versucht, eine neue Klasse mit einer normalen main Methode zu erstellen, aber es wird auch nie ausgeführt.

+1

In Server-Apps ist das Laden von Ausführung/Klasse nicht identisch mit Konsolen-/Desktop-Apps. In Web-Apps können Sie ApplicationListener verwenden, die mehrere Ereignisse enthalten. Sie können eine Klasse erstellen, die 'ServletContextListener' implementiert und deklariert es in Ihrer web.xml – Yazan

Antwort

2

Sie benötigen einen ServletContextListener Implementierung zu erstellen, und registrieren Sie es in Ihrer web.xml Datei:

ApplicationServletContextListener.java:

import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 

public class ApplicationServletContextListener implements ServletContextListener { 

    @Override 
    public void contextInitialized(ServletContextEvent arg0) { 
     System.out.println("Application started"); 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent arg0) { 
    } 
} 

web.xml:

<web-app> 
    <listener> 
    <listener-class> 
     com.yourapp.ApplicationServletContextListener 
    </listener-class> 
    </listener> 
</web-app> 

Wenn Servlet 3.0 verwenden, können Sie auch Beschriften Sie die Klasse einfach mit der @WebListener Annotation, anstatt sie in Ihrerzu registrierenDatei.


Alternativ kann, wie ein anderer Benutzer weist darauf hin, enthält Jersey ein ApplicationEventListener, die Sie eine Aktion ausführen können, sobald die Anwendung initialisiert wird:

MyApplicationEventListener.java:

public class MyApplicationEventListener implements ApplicationEventListener { 

    private volatile int requestCount = 0; 

    @Override 
    public void onEvent(ApplicationEvent event) { 
     switch (event.getType()) { 
      case INITIALIZATION_FINISHED: 
       System.out.println("Application was initialized."); 
       break; 
      case DESTROY_FINISHED: 
       System.out.println("Application was destroyed."); 
       break; 
     } 
    } 

    @Override 
    public RequestEventListener onRequest(RequestEvent requestEvent) { 
     requestCount++; 
     System.out.println("Request " + requestCount + " started."); 

     // return the listener instance that will handle this request. 
     return new MyRequestEventListener(requestCnt); 
    } 
} 

Hinweis, dass dies nicht Teil des JAX-RS-Standards und bindet Ihre Anwendung an Jersey.

Verwandte Themen