部署springboot的war包到tomcat,静态资源以及bootstrap等的url,以及controller的mapping映射等无法使用的问题

最近在部署一个springboot的war文件到tomcat的时候,出现了一大堆的404,找不到的问题,在eclipse调试中不曾出现。
后来仔细核实发现,原来确实是路径有问题。
在浏览器可以看见他的后台访问路径如下:

XHR POST http://127.0.0.1:8080/home/welcome                    //这是一个mapping映射,到controller的
XHR POST http://127.0.0.1:8080/home/getTree     //这是一个对静态资源的访问

这个路径没毛病哈,跟我在eclipse中调试的时候的路径一模一样哈,可是就是报了404的错误。
原因就在于,怎么能一模一样呢?当然是错的。
其实在网上任何一篇比较完整可靠的,教你怎么生成war包的教程,的最后面,都会有这么一句话,
http://localhost:[端口号]/[打项目名]/
因为war包在tomcat中运行,不是直接运行的war包,第一步其实是tomcat会自动把这个war包解压成一个war包的同名文件夹,你所有的class文件,以及各种静态文件都在里面。
因此,在通过网页登录的时候,理所当然,应该是要加上你的这个项目名,即你的这个文件夹的名字。
我在登录我的主页的时候,我是注意到了的,是加了项目名称的,但是后面访问目录的时候,我看到一片飘红,我想当然了,疏忽了,一下子没想到。
访问所有该文件夹下的内容,包括静态文件以及怎么mapping映射等各种涉及到路径的文件,都是需要加上这个文件夹名称的!
因此,他正确的访问目录应该是:

XHR POST http://127.0.0.1:8080/myproject/home/welcome                    //这是一个mapping映射,到controller的
XHR POST http://127.0.0.1:8080/myproject/home/getTree     //这是一个对静态资源的访问

解决这一问题,我参考了几种方法,
1、把我的静态文件都用了thymeleaf的th:src="@{XXXXX}"的方式引用。
2、把我部署的项目文件夹下的内容,全部复制到tomcat的webapps下的ROOT文件夹下,注意,不带项目文件夹,是该文件夹根目录下的所有内容。
3、在配置文件中,配置server.servlet.context-path=/myproject,这个会给所有的controller中的mapping,以及静态文件的添加统一前缀,但是,要注意的是,这个不会自动为html中的访问mapping或者引用的路径的请求路径添加前缀,还是需要自行修改。比较方便的是,在你的映射路径前面加上…,比如我的映射路径位/net/loadData,修改成…/net/loadData,相对来说一劳永逸。
4、事实上,不需要配置server.servlet.context-path=/myproject,只需要在路径位置上加上…/,如…/net/loadData,就不会出现这个bug了。当然配上了也没什么问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼月半

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值