2013-10-14 178 views
0

這是我在這個論壇上的第一篇文章。道歉,如果我違反了任何規範。tomcat球衣servlet初始化

我正在Tomcat容器內編寫一個RESTful servlet,並在啓動時(通過JDBC)連接到數據庫,然後在接收到HTTP請求時,它會將HTTP POST請求中的數據插入到數據庫中。

我現在知道可以在contextInitialized方法中通過在球衣webapp類中實現ServletContextListener接口來初始化數據庫連接。 但是,我也有一個構造函數,它不斷爲每個HTTP post請求調用。我只是定義了這個構造函數,因爲我想我可能會在其中添加一些調試消息來理解流程。

請注意,我的web.xml中具有時加載的啓動參數設置爲1

我想知道的是以下內容: 爲什麼Tomcat的呼籲針對每個HTTP請求我的web應用程序類的構造函數我的web服務? 另外,在我的webapp的日誌中,我注意到init方法在構造函數之前被調用。這聽起來很奇怪。對 ?還是不是真的? 但是,我的web服務的每個HTTP請求都不會調用init方法。它只在Tomcat啓動時才被調用。

我的Tomcat版本是v7.0,我使用的是JDK 1.7。

任何幫助理解這種行爲將不勝感激。

回答

0

這聽起來像是你在同一個類中共同定位不同範圍的工件,因此也是奇怪的行爲。

如果願意,ServletContextListener應該是應用程序級別的作用域,即Singleton。

另一方面,Jersey資源類是請求級作用域,即每次有進入的請求處理時都會創建它。

我建議在兩個獨立的類中去耦這些。