2011-06-01 101 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()方法中。

相關問題