我在Java代码中使用Web应用程序,它使用servlets
。我的问题是如何初始化一些不是servlet
的java类。我知道如果客户端连接 - 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>
我在部署应用程序时遇到此错误:
警告:不支持的部署描述符元素listener-class 值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.
}
}
非常好,容易,工作:)
答案 0 :(得分:3)
执行此操作的首选方法是安装ServletContextListener
。
当容器启动并关闭时,它们有机会运行代码。
如果代码只影响单个servlet(或者需要初始化该servlet对象的私有内容),那么你也可以在servlet的init
方法中完成工作,并确保servlet甚至被加载在发出请求之前(通过load-on-startup
参数)。
答案 1 :(得分:0)
您可以运行代码来初始化其中一个servlet的init()
方法中的其他类。