2011-07-12 42 views
2

我如何使用tomcat服務器將數據加載到內存中?Jsp將大量數據加載到內存中?

我有一個從文件加載數據的java類。 我想將數據加載到內存中一次,並且每當客戶端請求使用該類的頁面時,數據將從內存中使用。

例如

class MyClass 
{ 
     HashMap data = new HashMap(100); 
     public void LoadDataFromFile() 
     {.....} 
     public void UseTheData(String input) 
     {....} 
     public MyClass(){ LoadDataFromFile();} // c'tor load data 
     public SetInput(String Input) 
     { 
      UseTheData(input); 
     } 
} 

,並在我的JSP文件

Myclass myclass= new MyCass(); 
myclass.LoadDataFromFile(); 
myclass.UseTheData(); 

我知道我應該在jsp文件

使用JSTL如果我使用範圍= 「會議」 將在數據加載將保持?

<jsp:useBean id="myclass" class="MyClass" scope="session"> 
<jsp:setProperty name="myclass" property="input" value="blabla" /> 
</jsp:useBean> 

如果我在構造函數中進行數據加載,我可以確保該類只是init一次嗎?

回答

3

創建一個ServletContextListener並將其註冊到您的web.xml文件中。在ServletContextListener中,初始化應用程序時,讀取該文件並將其存儲在ServletContext的屬性中。然後可以從Java和JSP代碼輕鬆訪問此屬性。

+0

我的java類不知道這個servlet,所以我需要將數據從servlet傳遞給我的類,對吧? – yossi

+2

使用scope =「application」替換scope =「session」,您將訪問存儲在ServletContext屬性中的對象。但jsp:useBean真的是古代的東西。您應該真正使用MVC框架並停止使用JSP中的Java和jsp:xxx標記。 –

+0

我已經繼承了代碼,將所有內容移動到框架中現在不是一個選項:(如果我使用scope =「application」,那麼jsp:useBean只會創建一個新的bean,如果沒有一個? – yossi