2016-05-29 82 views
2

我創建使用新澤西州和Maven Web應用程序創建一個主要方法,我想執行一些代碼在服務器啓動時,而不是當一個函數被調用。在新澤西州的Web應用程序

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

如果使用的servlet 3.0,你也可以只需使用@WebListener註釋對類進行註釋,而不是將其註冊到您的中文件。


另外,作爲另一個用戶指出,新澤西州包括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標準的一部分,並且會將您的應用程序與使用Jersey相關聯。

相關問題