搜尋

首頁  >  問答  >  主體

java-web - Java WEB:什麼樣的jar套件必須放到WEB-INF下?有些包包放外面tomcat就起不來

有2個jar包commons-fileupload-1.3.2.jar和commons-io-2.5.jar
我開始是把這兩個包和其他包一樣放外面的,也就是External Libraries
寫好相關的類別之後,在web.xml設定servlet和mapping

<servlet>
    <servlet-name>mytest</servlet-name>
    <servlet-class>servlet.FileUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>mytest</servlet-name>
    <url-pattern>/upload</url-pattern>
</servlet-mapping>

然後Tomcat就無法啟動,提示:

嚴重: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component

java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException

問題:
commons-fileupload和commons-io這兩個jar一定要放在WEB-INF下麼,為什麼?
為什麼不能放在External Libraries?我其他套件都放在External中都能用啊


怎麼這兩個就進不來呢?
我在WEB-INF下新建一個lib,然後把這兩個包放進去,發布的時候就有了,然後運行也正常
這兩個包有什麼特別的地方?為什麼一定要放WEB-INF下

phpcn_u1582phpcn_u15822806 天前1100

全部回覆(5)我來回復

  • 某草草

    某草草2017-05-17 10:00:05

    idea的tomcat插件發布應用程式是這個Artifact

    看看你的目前專案的Artifact是不是沒有External Libraries裡面依賴的jar包

    那就再這個Artifact裡面加上lib(在專案web/WEB-INF/lib下放入jar包会自动加到Artifact里面。这就是为什么你说的为什么放到WEB-INF才行的原因。当然你完全可以把依赖jar包还放在External Libraries,在Artifact这里添加上就行,不过还是推荐把依赖的jar包放在项目web/WEB-INF/lib裡面,把這個資料夾當作一個jar庫放在External Libraries)

    之後在啟動tomcat依賴問題解決

    回覆
    0
  • 怪我咯

    怪我咯2017-05-17 10:00:05

    先修正一下,是WEB-INF目錄,不是WEB-INFI。

    發布之前,你是用maven對專案打包的嗎?如果maven中有commons-fileupload的依赖,打包时会放在WEB-INF/lib下的。

    回覆
    0
  • PHPz

    PHPz2017-05-17 10:00:05

    運作時所依賴的套件

    回覆
    0
  • PHPz

    PHPz2017-05-17 10:00:05

    放在WEB-INF/lib中的jar包,即使不引入為依賴,package的時候,也會預設被打到最終的war包裡(位置依然是WEB-INF/lib)。至於位置不在WEB-INF/lib下的jar包,則需要引入為依賴,才會在package時打入最終的war包(依然會位於WEB-INF/lib)。引入為依賴的方法可參考3樓的解答

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-17 10:00:05

    我也遇到過這個問題,我發現Import的Jar發佈時沒添加到WEB-INF/lib下,在Tomcat目錄下確實看不到相應的Jar,於是我每次Import後都再復制粘貼到的WEB-INF/lib下,甚至有時直接不Import直接就往Referenced Libraries和WEB-INF/lib下貼上。

    回覆
    0
  • 取消回覆