首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomcat Java Servlet -在应用程序启动时初始化类

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

Stack Overflow用户
提问于 2011-06-02 04:05:37
回答 3查看 18.4K关注 0票数 10

我有一个需要花一点时间来启动的类(进行一些JNI调用等等),所以每次加载页面时都初始化这个类是不可行的。是否可以在应用程序启动时初始化这个类,然后在提供页面时访问它的方法?

例如:

我有MyClass。当应用程序(tomcat)启动时,我希望它初始化我的类,如下所示:

代码语言:javascript
复制
MyClass myClassInstance = new MyClass("arg1", "arg2");

然后,当页面被调用时,比如/testpage,我想调用myClassInstance:

代码语言:javascript
复制
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>");
    }
}

这个是可能的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-02 04:10:00

您有两个选择:

  1. 在servlet的init()方法中初始化您的类。您可以添加<load-on-startup>属性以确保您的servlet是在应用程序启动时创建的,而不是在第一次访问时创建。
  2. 添加ServletContextListener并使用contextInitialized()回调方法。使用ServletContext#setAttribute存储创建的对象以供将来使用。
票数 21
EN

Stack Overflow用户

发布于 2011-06-02 04:10:49

如果您希望它在整个应用程序中只发生一次,并且在任何servlet运行之前发生,那么实现ServletContextListener并将启动代码放在contextInitialized()中。然后设置您的web.xml,将您的类指定为侦听器。

否则,您可以按照另一个答案所说的做,并将其放入servlet的init()方法中。

票数 8
EN

Stack Overflow用户

发布于 2011-06-02 04:08:49

您可以在servlet的init方法中初始化该类。

init()方法是在servlet实例加载时调用的,因此它是执行开销较大的操作的好地方。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6206996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档