IntelliJ IDEA + tomcat 9,无法部署时报错(servlet的urlpattern错误和jar包重复)

今天发现在部署一个简单的Servlet的时候发生了问题,显示部署失败。那时我能确信tomcat启动成功并且开启连接,其次我的项目也成功的编译,并且被做成了idea的一个正确的arifact,tomcat也设置了正确的部署设置。

这个问题出现在我写了一个servlet之后,@WebServlet的urlpattern参数写错了,把"/hello"写成"hello"。那之前没有出现部署问题。

但我一时没有想到是servlet的问题,而是在idea的project structure和tomcat的configuration里调整。除此之外,我还以为是我把电脑上所有jar包全部放在一个javaexlib文件夹里然后引用的问题,因为另一个成功部署的项目,在部署javaexlib之后就失败了。

 

首先解决第一个问题的经过。

项目结构的arifact目录结构的设置

甚至这个项目在编译之后已经被做成了一个arifact,只需要让tomcat把这里作为CATALINA_BASE执行即可。

tomcat已部署,设置了虚拟的localhost的根目录为/。

结果产生了一大串报错,如下图:

查找了网络上所有教程,很少出现这种情况,且所有查找出的原因(jar包重复,servlet类前面的@WebServlet标注和web.xml文件里的<servlet>标签重复)都无效,而且依据对tomcat和idea工作流程(编译文件到一个指定目录,如默认的项目根目录的out/product文件夹下,然后将需要部署的内容做成一个arifact,如out/arifact文件夹下,最后部署到本项目根目录的web文件夹下,让tomcat从这里启动)的理解,不应该出现错误!!!

于是我硬着头皮仔细查找每一句,看看究竟是什么问题。

直到我看到一串红色报错里有一句白字:

白字后面的第二个Cased by红字里有一个Invalid <url-patter>,于是我找到唯一的servlet

然后改成

就通过了。

 

 

 

然后是第二个问题,部署lib时出错,我把电脑上所有比如mysql jdbc之类的jar的包和库全部放在了javaexlib文件夹下。

部署时候,不部署这个多余的包文件夹即可完好运行。

但是一旦部署时将这个文件夹部署——

部署之后:

之后报错:

有了第一个问题的解决经验,我明白要先看看报错,但这回白字在底部

然后往回找

找到第一句

猜测之前看到的jar重复问题,显然我们不部署javaexlib即可,但我决定尝试验证问题。

 

于是我查看项目目录的arifact文件夹,跟idea显示的不一样,乱的很,我认为是之前乱设置路径弄乱了文件,就删除arifact下的所有东西,重新部署,发现可以运行,但servlet(HelloServlet,url为"/hello")的doGet无法工作。此时打开,发现根目录下的out/arifact/我的项目/web-info文件夹和web里的web-info全空的,就重启idea重新部署,访问/hello显示404 not found,然后修改了HelloServlet文件,重新编译,之后/hello页面正常工作。但是web文件夹下仍然空着(/out/arifact内容符合正常人理解),也就是说,tomcat运行根目录是/out/arifact/your_project,而web文件夹只是前端页面等resources。

进入正题,为什么部署出错。

我直接删掉了classpath下的javaexlib里的所有内容,也没有在部署时添加javaexlib内的包,也就是说,我只有在项目编译时才必须使用javaexlib的(为了import servlet而使用的)包。我仔细一想,我的javaexlib里的内容大多是复制自tomcat的lib,也就是说,这两个lib文件夹才是重复的根源,就类似于jdk和jre,一个需要开发时包,一个需要运行时包。

所以根源就是,tomcat的lib和部署的javaexlib里的jar包冲突了。完美解决。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值