记录第一次通过Tomcat发布war包遇到的问题

尝试用idea通过maven生成war包,然后用tomcat发布,参照Servlet入门这篇文章一步一步执行,但是到了发布阶段出现了如下图
在这里插入图片描述

立马傻眼了,是我的程序写的有问题?无法解析servlet,还是配置有问题?为了弄明白问题到底出在哪,我做了如下尝试:

  1. 重新查看自己编写的servlet,也没发现什么,毕竟就那么几行,又从网上找了一个例子例子2,两个例子差不多,最后发现依旧出现上面的图片。
  2. 程序没有问题,那可能是war包打的有问题,毕竟我也是第一次用maven,索性重新创建一个普通的项目,参照例子2只生成class文件,并把文件放到tomcat安装目录\webapps\ROOT里,结果正确显示了内容,此时证明我的war包可能真的有问题。
  3. 仔细看了一下war包,实际上就是一个按照特定目录结构的压缩文件夹,从网上查找可以通过jar -cvf xxx.war . 这个命令把相关文件夹手工打成war包,一个class文件+一个web.xml文件+特定的目录(WEB-INF、META-INF),这个动作看着简单,但是也经过一番波折,如果目录结构不对在tomcat启动过程中会有提示,这部分内容还是要仔细看的
    在这里插入图片描述

上面这个截图是没有问题的,如果有问题例如war包结构不对,会有一行警告信息。

  1. 我把第2步ROOT里的文件手工打了一个war包,放到webapps这个目录中,还是出现“Directory listing for”这个图片,看来不是war包的问题,一定是配置出错了
  2. 当时我的web.xml以及对应的文件目录结构如下图,
    在这里插入图片描述
    在浏览器输入localhost:8080/dpcv/出现“Directory listing for”,正当我一筹莫展之时,我突然输入了localhost:8080/dpcv/dpcv/ 正确的结果出现了,顿时两眼放光,一丢丢的小兴奋啊,到底是什么原理呢?

接下来就是找到答案,也就是理解《servlet-mapping》这个标签的含义,当我在浏览器里输入localhost:8080/dpcv/时,实际上找的是webapps里dpcv这个文件夹,而实际上我想访问的是dpcv这个servlet,《servlet-mapping》就是负责这个映射的,也就是在localhost:8080/dpcv/个目录的基础上,我要再访问/dpcv才能得到dpcv这个servlet,然后通过《servlet》标签,获取实际的class文件,理解了这个过程就可以随心所欲的配置web.xml了

在这里插入图片描述

接下来未来验证自己的推断,我又编写了一个My.class文件,并把它放到了dpcv这个war包里,web.xml如上

如果我访问My.class只需要localhost:8080/dpcv/456/ 即可,如果还需要访问dpcv.class 则需要localhost:8080/dpcv/123

bingo

再记一下过程中的其他小常识吧

通过shutdown.bat关闭tomcat有时候无法停止,需要手工杀死相关进程,可以先通过netstat -ano|findstr “8080” 查看进程号,再通过taskkill F /PID 进程号 杀死进程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值