2011-06-01 102 views
8

我有一个需要一点时间才能启动的类(创建一些JNI调用,但不是),所以每次加载页面时都不可能初始化此类。是否可以在应用程序启动时初始化此类,然后在页面被提供时访问它的方法?Tomcat Java Servlet - 在应用程序启动时初始化类

例如:

我有MyClass。当应用程序(Tomcat)的启动,我想它initialze我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>"); 
    } 
} 

这可能吗?

+0

相关:http://stackoverflow.com/questions/3468150/using-init-servlet,http://stackoverflow.com/questions/3153739/config-files-for-a-webapplication-load-once-and -store-在哪里,http://stackoverflow.com/questions/5951294/is-there-a-way-to-do-something-on-a-j2ee-server-start-im-using-tomcat等 – BalusC 2011-06-01 20:19:47

回答

19

你有两个选择:

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

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

+0

yeeessss !正是我需要的。 “” – 2014-10-16 14:15:19

+0

有关“启动时加载”的详细信息:https://docs.oracle.com/cd/E13222_01/wls/docs81/webapp/web_xml.html#1039287 – RobertG 2018-03-08 09:58:14

3

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

8

如果你希望它为整个应用程序,一旦发生,在运行任何servlet之前发生,实现ServletContextListener,把你的启动代码中contextInitialized()。然后设置您的web.xml以将您的课程指定为侦听器。

否则,你可以做其他答案所说的,并将其放在servlet的init()方法中。

相关问题