我使用Java代碼的Web應用程序,它使用servlets
。我的問題是如何初始化一些java類,這不是servlet
。我明白,如果客戶端連接 - servlet
然後打印輸出。但只有「如果客戶端連接」。如何初始化一些類,它不是glassfish4上的Servlet?
是否有可能在進行任何連接之前運行某些線程?
編輯:
感謝的答案,現在我試圖做這樣說:
類:
package com.xsistema.filemanager.application;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
*
* @author Ernestas Gruodis
*/
public class ServerInit implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("Initialized");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("Destroyed");
}
}
而且glassfish-web.xml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
<context-root>/file-manager</context-root>
<class-loader delegate="true"/>
<jsp-config>
<property name="keepgenerated" value="true">
<description>Keep a copy of the generated servlet class' java code.</description>
</property>
</jsp-config>
<listener>
<listener-class>
com.xsistema.filemanager.application.ServerInit
</listener-class>
</listener>
</glassfish-web-app>
我得到這個呃ROR同時部署應用程序:
警告:不支持的部署描述符元素監聽級 值com.xsistema.filemanager.application.ServerInit。
這裏有什麼問題?
EDIT2:
不能刪除這個問題,似乎是重複的(它有答案的話)。但我找到了解決辦法:
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.servlet.ServletContextEvent;
@Startup
@Singleton
public class Config {
@PostConstruct
public void init() {
// Do stuff during webapp's startup.
}
@PreDestroy
public void destroy() {
// Do stuff during webapp's shutdown.
}
}
非常好,方便,工作:)
但這意味着我必須在所有servlet上添加相同的代碼,或者執行一些過濾器。不好。 –
如果它是在你調用任何servlet之前需要執行的東西,那麼是的。在這種情況下,我會讓所有的servlet用這樣的邏輯擴展一個基本的servlet類。 –
好的,ServletContextListener在這裏更適合,如果它是一個應用程序範圍的初始化。我upvoting其他答案:) –