Terdapat dua pakej jar commons-fileupload-1.3.2.jar dan commons-io-2.5.jar
Saya pada mulanya meletakkan kedua-dua pakej ini di luar seperti pakej lain, iaitu, Perpustakaan Luaran
Tulis kelas yang berkaitan Selepas itu, konfigurasikan servlet dan pemetaan dalam web.xml
<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>
Kemudian Tomcat gagal dimulakan, gesa:
Kritikal: ContainerBase.addChild: mulakan:
org.apache.catalina.LifecycleException: Gagal memulakan komponen
java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException
Soalan:
Adakah dua balang commons-fileupload dan commons-io perlu diletakkan di bawah WEB-INF Mengapa?
Mengapa ia tidak boleh diletakkan di Perpustakaan Luar? Semua pakej saya yang lain boleh digunakan dalam Luaran Mengapa kedua-dua ini tidak boleh diakses?
Saya mencipta lib baharu di bawah WEB-INF, dan kemudian meletakkan dua pakej ini ke dalamnya apabila saya mengeluarkannya, dan kemudian ia berjalan seperti biasa Apakah yang istimewa tentang kedua-dua pakej ini? Mengapa anda mesti meletakkan WEB-INF di bawahnya
aplikasi penerbitan pemalam tomcat idea ialah Artifak ini
Periksa sama ada Artifak projek semasa anda tidak mempunyai pakej balang yang bergantung padanya di Perpustakaan Luar
Kemudian tambahkan lib pada Artifak ini (dalam projek
web/WEB-INF/lib
下放入jar包会自动加到Artifact里面。这就是为什么你说的为什么放到WEB-INF才行的原因。当然你完全可以把依赖jar包还放在External Libraries,在Artifact这里添加上就行,不过还是推荐把依赖的jar包放在项目web/WEB-INF/lib
, letakkan folder ini sebagai perpustakaan balang dalam Perpustakaan Luar)Masalah kebergantungan telah diselesaikan selepas memulakan tomcat
Pertama sekali, izinkan saya membetulkan anda Ia adalah direktori
WEB-INF
, bukan WEB-INFI.WEB-INF
目录,不是WEB-INFI。发布之前,你是用maven对项目打包的吗?如果maven中有
Adakah anda menggunakan maven untuk membungkus projek sebelum diterbitkan? Jika terdapat pergantungancommons-fileupload
的依赖,打包时会放在WEB-INF/lib
commons-fileupload
dalam maven, ia akan diletakkan di bawahWEB-INF/lib
semasa pembungkusan. 🎜Pakej bergantung pada masa jalan
Pakej balang yang diletakkan dalam WEB-INF/lib, walaupun ia tidak diperkenalkan sebagai kebergantungan, akan disertakan dalam pakej perang terakhir secara lalai (lokasinya masih WEB-INF/lib) semasa pembungkusan. Bagi pakej jar yang tidak terletak di bawah WEB-INF/lib, ia perlu diperkenalkan sebagai kebergantungan sebelum pakej perang terakhir akan dimasukkan semasa pakej (ia akan tetap terletak di WEB-INF/lib). Untuk kaedah memperkenalkan kebergantungan, sila rujuk jawapan di tingkat 3
Saya juga menghadapi masalah ini. Saya mendapati Jar yang diimport tidak ditambahkan pada WEB-INF/lib apabila ia dikeluarkan. Saya benar-benar tidak dapat melihat Jar yang sepadan dalam direktori Tomcat, jadi saya menyalin dan menampalnya setiap kali selepas mengimport. Di bawah WEB-INF/lib, kadangkala tampal terus ke dalam Referenced Libraries dan WEB-INF/lib tanpa mengimport.