Heim  >  Fragen und Antworten  >  Hauptteil

java-web - Java WEB: Welche Art von JAR-Paket muss unter WEB-INF platziert werden? Wenn einige Pakete außerhalb abgelegt werden, kann Tomcat nicht gestartet werden.

Es gibt zwei JAR-Pakete commons-fileupload-1.3.2.jar und commons-io-2.5.jar
Ich habe diese beiden Pakete zunächst wie andere Pakete, also externe Bibliotheken, nach draußen gestellt.
Schreiben Sie die relevanten Klassen. Konfigurieren Sie anschließend das Servlet und Zuordnung in 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>

Dann startet Tomcat nicht, Meldung:

Kritisch: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Komponente konnte nicht gestartet werden

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

Frage:
Müssen die beiden Jars commons-fileupload und commons-io unter WEB-INF platziert werden?
Warum kann es nicht in externen Bibliotheken platziert werden? Alle meine anderen Pakete können in External verwendet werden. Warum kann auf diese beiden nicht zugegriffen werden?
Ich habe eine neue Bibliothek unter WEB-INF erstellt und diese beiden Pakete dort eingefügt, als ich sie veröffentlicht habe, und dann lief es normal. Was ist das Besondere an diesen beiden Paketen? Warum müssen Sie WEB-INF darunter einfügen?

phpcn_u1582phpcn_u15822683 Tage vor984

Antworte allen(5)Ich werde antworten

  • 某草草

    某草草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依赖问题得到解决

    Antwort
    0
  • 怪我咯

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

    先纠正一下,是WEB-INF目录,不是WEB-INFI。

    发布之前,你是用maven对项目打包的吗?如果maven中有commons-fileupload的依赖,打包时会放在WEB-INF/lib下的。

    Antwort
    0
  • PHPz

    PHPz2017-05-17 10:00:05

    运行时依赖的包

    Antwort
    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楼的解答

    Antwort
    0
  • 我想大声告诉你

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

    我也遇到过这个问题,我发现Import的Jar发布时没添加到WEB-INF/lib下,在Tomcat目录下确实看不到相应的Jar,于是我每次Import后都再复制粘贴到的WEB-INF/lib下,甚至有时直接不Import直接就往Referenced Libraries和WEB-INF/lib下粘贴。

    Antwort
    0
  • StornierenAntwort