您的位置:首頁技術文章
文章詳情頁

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

瀏覽:147日期:2023-12-17 17:02:51

問題描述

有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中都能用啊java-web - Java WEB:什么樣的jar包必須放到WEB-INF下?有些包放外面tomcat就起不來java-web - Java WEB:什么樣的jar包必須放到WEB-INF下?有些包放外面tomcat就起不來怎么這兩個就進不來呢?我在WEB-INF下新建一個lib,然后把這兩個包放進去,發布的時候就有了,然后運行也正常這兩個包有什么特別的地方?為什么一定要放WEB-INF下

問題解答

回答1:

idea的tomcat插件發布應用是這個Artifactjava-web - Java WEB:什么樣的jar包必須放到WEB-INF下?有些包放外面tomcat就起不來

看看你的當前項目的Artifact是不是沒有External Libraries里面依賴的jar包java-web - Java WEB:什么樣的jar包必須放到WEB-INF下?有些包放外面tomcat就起不來java-web - Java WEB:什么樣的jar包必須放到WEB-INF下?有些包放外面tomcat就起不來

那就再這個Artifact里面加上lib(在項目web/WEB-INF/lib下放入jar包會自動加到Artifact里面。這就是為什么你說的為什么放到WEB-INF才行的原因。當然你完全可以把依賴jar包還放在External Libraries,在Artifact這里添加上就行,不過還是推薦把依賴的jar包放在項目web/WEB-INF/lib里面,把這個文件夾作為一個jar庫放在External Libraries)java-web - Java WEB:什么樣的jar包必須放到WEB-INF下?有些包放外面tomcat就起不來

之后在啟動tomcat依賴問題得到解決

回答2:

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

發布之前,你是用maven對項目打包的嗎?如果maven中有commons-fileupload的依賴,打包時會放在WEB-INF/lib下的。

回答3:

運行時依賴的包

回答4:

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

回答5:

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

標簽: java
相關文章:
国产综合久久一区二区三区