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

标签 java tomcat classloader

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

例如:

我有我的类(class)。当应用程序 (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>");
    }
}

这可能吗?

最佳答案

你有两个选择:

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

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

关于java - Tomcat Java Servlet - 在应用程序启动时初始化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6206996/

相关文章:

java - CDI 注入(inject)不明确的依赖关系 "pick any, i don' t care"

java - 在运行时更改类类型

java - Resteasy 不适用于 wildfly 11 但适用于 Tomcat

java - 修补或覆盖核心 Java 10 类的实现

java - 为什么 jrunscript 不支持我的类路径?

android - 包裹/序列化类加载器

java - Google App Engine - 带有调度程序 Servlet 的 Blob 存储服务

java - 在上下文不起作用的情况下从 AsyncTask onPostExecute 调用 Android Intent

java - tomcat如何使用build.properties和build.xml?

java - 我在哪里可以查看 Eclipse 中的 Tomcat 日志文件?