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?
For Example:
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");
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>");
}
}
Is this possible?
You have two choices:
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.
Add ServletContextListener
and use contextInitialized()
callback method. Use ServletContext#setAttribute
to store created object for future use.