Tomcat启动时实例化对象

时间:2010-11-19 14:59:39

标签: java jsp tomcat ontology

我部署了一个Tomcat服务器,它接收从JSON格式的传感器传输的观察结果。我还有一个传感器描述了我想要使用的本体。

但是,我想在服务器接收到任何传感器观察之前加载本体。如何在加载Tomcat后立即实例化对象?

3 个答案:

答案 0 :(得分:7)

要在应用程序启动或停止时执行操作,您应使用ServletContextListenerhttp://download.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html

在web.xml中:

<web-app>
    ...
    <listener>
        <listener-class>com.example.Listener</listener-class>
    </listener>
    ...
</web-app>

与Peter Knego的提议相反,此解决方案可以移植到任何servlet容器,而不仅限于Tomcat。

答案 1 :(得分:1)

我认为严格来说,你想要做的是在Tomcat加载你的servlet 后立即实例化一个对象。 (对于特定于应用程序的功能,修改Tomcat本身没有任何意义。)

在这种情况下,您的Servlet类可以覆盖/实现init(ServletConfig config)方法。当初始化servlet时,servlet容器(在本例中为Tomcat)调用它,并且它是执行静态启动逻辑的正确位置,例如您在此处引用的类型。

实际上,servlet在返回init方法之前甚至无法接收连接,因此您可以保证在传感器观察到达之前将完全加载本体。

答案 2 :(得分:0)

您可以使用在加载Web应用(contex)时调用的event listeners。在那里,您初始化对象并将其保存到ServletContext,以便应用程序中的所有servlet都可以使用它们。

实施ServletContextListener并在其中contextInitialized()放置:

contextInitialized(ServletContextEvent sce){

    // Create your objects
    Object myObject = ...

    sce.getServletContext().setAttribute("myObjectKey", myObject);
} 

然后在Tomcat context.xml中的register the listener

<Context path="/examples" ...>
    ...
    <Listener className="com.mycompany.mypackage.MyListener" ... >
    ...
</Context>