我使用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其他答案:) –