2011-04-05 31 views
0

我使用glassfish來運行web應用程序。我使用netbeans。如何在web應用程序中寫入長整型init

我的web應用程序需要很長的init。

我在ServletContextListener.contextInitialized方法中寫道。

我把我的代碼一些日誌。

如果我在contextInitialized方法內寫入init代碼,在我看來,init被某人中斷:日誌停止了一會兒,我不明白爲什麼。

如果我在子線程中編寫我的代碼,根本沒有日誌。

什麼是在webapp中做一個長初始化的最佳方法?

謝謝。

回答

0

一個選項是有一個servlet load-on-startup。請在啓動一個servlet負載這樣

<web-app> 

<servlet> 
    <servlet-name>InitProcess</servlet-name> 
    <servlet-class>com.my.ServletName</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

</web-app> 

的servlet將在啓動和init(),在Servlet的方法將由容器調用加載。你可能有你的代碼。

<load-on-startup>中的數字決定了servlet加載的順序。見here。至少由Tomcat和Weblogic支持。


爲了得到ServletContext的使用:

ServletContext ctx = getServletContext(); 

this code block at Java2s

+0

謝謝。你知道我的代碼爲什麼不起作用嗎?在我的contextInitialised方法中,我從長初始化階段爲我的webapp啓動了一些ServletContext屬性。你知道我如何從servlet中設置它們嗎? – Istao 2011-04-05 06:19:49

+0

@Istao更新了答案 – Nishant 2011-04-05 06:33:30

+0

servlet並非真正適合應用程序範圍的init。這也沒有回答爲什麼servletcontextlistener init顯然被中止的問題。 – BalusC 2011-04-05 12:43:10

1

ServeletContextListener比servlet初始化的好地方。 Incase,由於某種原因(資源短缺或內存管理問題)容器破壞了servlet並重新創建,那麼這可能會在同一個應用程序中搞砸其他servlet的數據。

嘗試調查停止的原因,並保持ServletContextListner爲

相關問題