2016-05-29 3 views
2

Я создал веб-приложение с использованием Jersey и Maven, и я хочу выполнить код при запуске сервера, а не при вызове функции.Создайте основной метод в веб-приложении Джерси

@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, { 

Но метод main никогда не выполняется, я никогда не видел выход Main executed. Я также попытался создать новый класс с обычным методом main, но он также никогда не выполняется.

+1

В серверных приложениях загрузка выполнения/класса не такая же, как в консольных/настольных приложениях, в веб-приложениях вы можете использовать ApplicationListener, у которых есть несколько событий, что вам может быть интересно - это создать класс, который реализует 'ServletContextListener' и объявляет это в вашем web.xml – Yazan

ответ

2

Вы должны создать ServletContextListener реализацию, и зарегистрировать его в web.xml файле:

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> 

При использовании сервлетов 3.0, вы можете также просто аннотируйте класс с аннотацией @WebListener, а не регистрируйте его в своем web.xml файл.


Альтернативно, как другой пользователь указывает, Джерси включает ApplicationEventListener, которые вы можете использовать, чтобы выполнить действие, когда приложение инициализируется:

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); 
    } 
} 

Обратите внимание, что это не входит в стандарт JAX-RS, и свяжет ваше приложение с использованием Джерси.

Смежные вопросы