如何解决从Tomcat 9 context.xml加载Web应用程序甚至只是侦听器
我有一个要在初始化任何Web应用程序之前加载并运行一次方法的类。
由于找不到解决方法,因此我想到可以编写一个ServletContextListener并将其放在爆炸的WAR中,然后在其他Web应用程序之前进行部署/初始化。由于其他Web应用程序都是爆炸性的WAR,因此我读到可以通过在context.xml中声明它来首先部署它。
尽管我试图解释有关此问题的许多主题,博客和Tomcat的文档……我显然理解错了。主要问题是我找不到单个完整的示例。我还看到有人在战争本身中添加context.xml的引用,但这似乎是出于不同的目的。
这就是我所做的:
- 我将侦听器的WAR移到了Web应用程序之外的文件夹中。
- 我将以下行添加到Tomcat的lib / context.xml
<Context path="/webBootstrap" docBase="D:\work\app-j11t9-test\webBootstrap" />
这使Tomcat非常发疯,每个Web应用程序都会抛出很多错误。我确信那些知道的人会看到我的所作所为,然后在地上笑。
那么,我该怎么做呢? (要在所有其他Web应用初始化之前运行一次该监听器)
解决方法
听起来像您想要LifecycleListener
。编译后的代码(在适当的目录结构中的JAR或.class)需要放置在$ CATALINA_HOME / lib中,并在server.xml
中进行配置。 server.xml
中已经定义了几个这样的侦听器,如果需要,您可以查看每个侦听器的来源以获取启发。
您是否有类似基类的东西?在本堂课中,您做一个static variable
。
例如
public class BaseClass {
public static boolean initCodeRunned = false;
public static void doInit(){
if(!BaseClass.initCodeRunned){
// Do your code
// After the init was success,you can set the initCodeRunned to true.
BaseClass.initCodeRunned = true;
}
}
}
然后有两种方法可以继续。
-
首先,在index.jsp的第一行中调用
BaseClass.init()
。 -
或者您创建一个SessionListener。在会话监听器的
sessionCreated()
中,调用BaseClass.init()
函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。