Tomcat部署工件失败
今天学习文件上传,遇到了一些问题。
具体问题:
为了实现文件上传至服务器,将tomcat的部署修改了,学习到:
Idea部署项目的两种方式:
- war模式,将项目以war包的形式上传真实服务器的webapps目录中;
- war exploded模式,仅仅是目录的映射,就相当于tomcat在项目源文件夹中启动一样。
于是将tomcat中原来部署的war exploded改为war,但是随即就出现了下面的问题:
具体情况如下:
// 11-Oct-2022 22:32:11.984 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.modeler.BaseModelMBean.invoke 调用方法[manageApp]时发生异常
java.lang.IllegalStateException: 启动子级时出错
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:729)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:698)
......
Caused by: org.apache.catalina.LifecycleException: 无法启动组件[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Demo_war]]
......
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException
......
Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileUploadException
......
11-Oct-2022 22:32:11.985 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.modeler.BaseModelMBean.invoke 调用方法[createStandardContext]时发生异常
javax.management.RuntimeOperationsException: 调用方法[manageApp]时发生异常
......
Caused by: java.lang.IllegalStateException: 启动子级时出错
......
Caused by: org.apache.catalina.LifecycleException: 无法启动组件[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Demo_war]]
工件 Demo:war: 部署工件时出错。请参阅服务器日志了解详细信息
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException
......
Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileUploadException
......
很迷惑,以前tomcat部署基本上不会出错,遇事不决靠百度,搜索到一些解决办法。
搜索到的一些解决办法
- 因为Webservlet代码地址填写错误导致,可能是:
这里的斜杠/ 没有加上或者是这个路径已经被定义过了。也可以在web.xml配置文件中查看修改。
- 因为是maven项目,也搜到说是导包错误以及版本错误之类的
- 另外,也有说是函数内部错误导致的
具体解决方案
最后总结上一篇文章的出错点,感觉可以问题还是出在maven上,于是试了试手动导包到工件(应该是这么表述的吧),在文件-项目结构-工件中操作,如下图:
还是这个原因,把这两个包拉过来到lib下点击应用就OK了。
这里我先弄到war exploded里,然后能成功跑起来,然后再创建的war,再在tomcat中配置工件就部署成功了。