我有一个用于Web应用程序后端的java EE程序。它在tomcat服务器中运行。虽然我可以创建类来设置路由等,但是如何创建一个不影响也在启动时运行的路由的类?我想创建一个连接到数据库的类。无论是否请求网页,都需要这样做。我用它做了一堂课
public static void main (String [] args)
,但是在启动应用程序时如何才能运行?我不明白在发布时调用了什么类。我有web.xml和所有控制路由的类,但是有一个主类可以用来调用它吗?如果没有,如何在服务器启动的同时调用该类?
答案 0 :(得分:2)
(1)准备一个实现 javax.servlet.ServletContextListener
的课程。
(2)在课程的 contextInitialized(ServletContextEvent event)
方法中编写您的初创代码。
(3)在web.xml中注册类,如下所示。
<listener>
<listener-class>com.example.YourServletContextListener</listener-class>
</listener>
这可以在没有servlet调用的情况下初始化你的应用程序。
答案 1 :(得分:0)
在servlet init()方法中,您可以执行所有初始化任务(即加载应用程序时需要执行的任务)。另请注意,在web.xml部署文件中,将load-on-startup值设置为1,以指示容器立即加载servlet并调用其init()方法。
答案 2 :(得分:0)
您不应在Web应用程序中使用main方法。 相反,您可以将代码从main方法移动到该类的构造函数,或者在该类中创建一个新的公共方法。
然后在你的servlet中使用Init方法来创建一个Class的实例并调用该方法。
Servlet Init仅在首次访问servlet或启动服务器时调用一次(通常)。
这意味着在加载servlet期间只调用一次类。
答案 3 :(得分:0)
创业公司EJB Singleton怎么样?
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
@Startup
@Singleton
public class StartUpService {
@PostConstruct
public void start() {
// what you want to execute at startup
}
}