2011-11-09 38 views
1

我有一個運行在Tomcat 7中的web應用程序。 當我將tomcat默認庫(jsp-api.jar,servlet-api.jar等)放入我的它會拋出一個異常:java.lang.IllegalStateException: No org.apache.tomcat.InstanceManager set in ServletContext爲什麼我們不應該在應用程序庫中放置tomcat庫

當我從我的lib中刪除這些jar並在build.xml中設置tomcat lib時,它工作正常。誰能向我解釋爲什麼會發生這種情況? 爲什麼我不能在我的lib文件夾中使用tomcat庫?

+0

相關:http://stackoverflow.com/questions/4076601/how-do-i-import-the-javax-servlet-api-in-my-eclipse-project/4076706#4076706 – BalusC

+3

每個人都在說你「應該「不是,但實際上你必須*不要,在你的網絡應用程序中包含JEE罐。 –

回答

9

您基本上是不想將Servlet,JSP,EL或任何容器相關的jar添加到您的應用程序的WEB-INF/lib文件夾中。

這些庫將由容器提供。如果您明確添加它們,那麼已部署的應用程序將有問題(即兩個相同的jar放入同一個類路徑中)。

編輯:如果爲了需要這些罐子的代碼編譯比你可以將它們添加到您的類路徑 - 他們並不需要駐留在應用程序的WEB-INF/lib目錄下。

I.e.如果你使用的是Eclipse,你可以添加'用戶庫':Properties -> Java Build Path -> Libraries -> Add Library這將定義所有容器相關的庫;你也可以Add External JARs,並從tomcat7目錄中選擇。

編輯2:由於BalusC指出:「你可以參考它作爲目標運行時,那麼Eclipse會做魔術另見相關鏈接,我就此問題發表意見無需與用戶庫撥弄。 「

+0

感謝您的回覆。爲了編輯目的,我必須添加它們。沒有這些罐子,我無法編譯。 – freepublicview

+0

您可以添加駐留在與WEB-INF/lib不同位置的jar。即如果你使用的是Eclipse,你可以添加'用戶庫'來定義所有容器相關的庫,或者你可以添加'外部jar',並從tomcat7目錄中選擇。 –

+2

或者只是將其作爲目標運行時引用,那麼Eclipse將做到這一點。另見我在這個問題上評論的相關鏈接。無需擺弄用戶庫。 – BalusC

1

您不應該在應用程序中捆綁j2ee stand jar。它們由應用程序服務器提供。如果您希望可用於編譯的罐子,請在構建應用程序時將其放入編譯路徑中。但不要將它們捆綁在應用程序中。

所有的IDE都提供了在捆綁應用程序時使用exculde jars。

相關問題