如何在部署 WAR 时调用 Java 方法
4543 次
4 回答
4
目前尚不清楚您所说的“部署”是什么意思。那是 WAR 文件到达应用服务器的那一刻吗?也许你用 Ant 来搞点事情。那是应用程序启动的时候吗?也许您可以使用ServletContextListener来完成。
我所知道的任何 Java EE 应用服务器中都没有内置这样的机制,所以如果 Ant 不合适,你就不走运了。您需要一些可以为您进行部署的东西。
你这样做的目的是什么?这个方法有什么作用?
于 2011-05-16T10:39:44.700 回答
4
多种解决方案可供您使用:
- ServletContextListener可用于侦听启动事件并执行适当的操作。
- 同样的事情可以使用Servlet来完成,带有
load-on-startup
属性。您不必将 servlet 映射到 aservlet-path
并且只能将其用于启动操作。 - 如果您使用的是 Java EE 6,则可以使用带有 注释的 EJB
@Startup
,它会在启动期间实例化服务。@PostConstruct
注释声明了一个在实例化后执行的方法。请注意,这只适用于 EJB 单例。
于 2011-05-16T10:44:41.910 回答
3
于 2011-05-16T10:40:06.790 回答
1
如果您想将此功能放在您的网络应用程序中,那么正确的地方是 ServletContextListener
ServletContextListener接口的实现接收有关它们所属的 Web 应用程序的 servlet 上下文更改的通知。ServletContextListener 中定义了以下方法:
public void contextInitialized(ServletContextEvent sce)
public void contextDestroyed(ServletContextEvent sce)
当 Web 应用程序准备好服务时调用 contextInitialized() 方法,当它即将关闭时调用 contextDestroyed() 方法。以下代码显示了我们如何使用这些方法来记录应用程序事件:
public void contextInitialized(ServletContextEvent e) {
e.getServletContext().log("Context initialized");
}
public void contextDestroyed(ServletContextEvent e) {
e.getServletContext().log("Context destroyed");
}
查看示例,或者您可以扩展容器/服务器以进行监控,就像监控工具一样。
于 2011-05-16T11:05:52.393 回答