Java 如何初始化某个类,它不是glassfish4上的Servlet?

Java 如何初始化某个类,它不是glassfish4上的Servlet?,java,multithreading,servlets,glassfish-4,Java,Multithreading,Servlets,Glassfish 4,我有Java代码的web应用程序,它使用servlet。我的问题是如何初始化一些java类,它不是servlet。我知道,如果客户机连接,servlet然后打印输出。但仅限于“如果客户端连接” 在进行任何连接之前是否可以运行一些线程 编辑: 多亏了这些答案,我现在正试图这样做: 班级: package com.xsistema.filemanager.application; import javax.servlet.ServletContextEvent; import javax.serv

我有Java代码的web应用程序,它使用
servlet
。我的问题是如何初始化一些java类,它不是
servlet
。我知道,如果客户机连接,
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>

非常好用,简单易用:)

您可以在一个servlet的方法中运行初始化其他类的代码。

执行此操作的首选方法是安装一个

它们有机会在容器启动和关闭时运行代码


如果代码只影响一个servlet(或者需要初始化该servlet对象的私有对象),您还可以在servlet的
init
方法中执行该工作,并确保在发出请求之前加载servlet(通过
load on startup
参数)。

我在glassfish4上得到了以下警告:警告:不支持的部署描述符元素侦听器类值路径。路径。。。“glassfish 4似乎找不到指定的文件..您必须使用glassfish-web.xml吗?也许它不支持这一点。您不能使用标准的web.xml吗?或者尝试
@WebListener
注释。但这意味着我必须在所有servlet上添加相同的代码,或者进行一些筛选。。不太好。如果在调用任何servlet之前需要执行某些操作,那么可以。在这种情况下,我会让所有servlet使用这样的逻辑扩展一个基本servlet类。我对另一个答案投了赞成票:)“我必须在所有servlet上添加相同的代码,”。嗯,不是真的,这取决于代码的功能。虽然ServletContextListener可能是更干净的方法,但它在功能上几乎等同于将相同的代码放入单个Servlet并在启动时加载。在ServletContextListeners出现之前,人们就是这么做的。效果(它如何影响这个servlet和其他servlet)是相同的。
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.
    }
}