Tomcat Java Servlet - 在应用程序启动时初始化类 [英] Tomcat Java Servlet - Initialize Class on Application Startup
问题描述
我有一个类需要一些时间来启动(进行一些JNI调用而不是什么),因此每次页面加载时初始化此类是不可行的。是否可以在应用程序启动时初始化此类,然后在提供页面时访问其方法?
I have a class that takes a bit of time to start up (makes some JNI calls and what not), so it is not feasable to initialize this class everytime a page loads. Is it possible to initialize this class on application startup, then access its methods as pages are being served up?
例如:
我有MyClass。当应用程序(tomcat)启动时,我希望它按如下方式初始化我的calss:
I have MyClass. When the application (tomcat) starts up I would like it to initialze my calss as follows:
MyClass myClassInstance = new MyClass("arg1", "arg2");
然后当调用一个页面时,比如/ testpage,我想调用myClassInstance:
Then when a page is called, say /testpage, I would like to make calls to 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>");
}
}
这可能吗?
推荐答案
您有两种选择:
-
初始化你的servlet的
init()
方法中的类。您可以添加< load-on-startup>
属性,以确保您的servlet是在应用程序启动时创建的,而不是在首次访问时创建的。
Initialize your class in servlet's
init()
method. You may add<load-on-startup>
attribute to make sure your servlet is created at application startup and not on first access.
添加 ServletContextListener
并使用 contextInitialized()
回调方法。使用 ServletContext#setAttribute
存储创建的对象以供将来使用。
Add ServletContextListener
and use contextInitialized()
callback method. Use ServletContext#setAttribute
to store created object for future use.
这篇关于Tomcat Java Servlet - 在应用程序启动时初始化类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!