Tomcat Java Servlet - 在应用程序启动时初始化类

时间:2011-06-01 20:05:37

标签: java tomcat classloader

我有一个类需要一些时间来启动(进行一些JNI调用而不是什么),因此每次加载页面时初始化此类是不可行的。是否可以在应用程序启动时初始化此类,然后在提供页面时访问其方法?

例如:

我有MyClass。当应用程序(tomcat)启动时,我希望它按如下方式初始化我的calss:

MyClass myClassInstance = new MyClass("arg1", "arg2");

然后当调用页面时,说/ testpage,我想调用myClassInstance:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import MyClass;

public class TestPage extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
        String myResult = myClassInstance.getResult("whatever");

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Test</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>" +myResult +"</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

这可能吗?

3 个答案:

答案 0 :(得分:20)

您有两种选择:

  1. 在servlet的init()方法中初始化您的类。您可以添加<load-on-startup>属性以确保您的servlet是在应用程序启动时创建的,而不是在首次访问时创建的。

  2. 添加ServletContextListener并使用contextInitialized()回调方法。使用ServletContext#setAttribute存储创建的对象以供将来使用。

答案 1 :(得分:8)

如果您希望整个应用程序发生一次,并且在任何servlet运行之前发生,请实施ServletContextListener并将您的启动代码放在contextInitialized()中。然后设置web.xml以将您的班级指定为听众。

否则,您可以执行其他答案所说的内容并将其放在servlet的init()方法中。

答案 2 :(得分:3)

您可以在servlet的init方法中初始化类 加载servlet实例时会调用init()方法,因此它是进行昂贵操作的好地方。

相关问题