前言Tomcat作为java容器是非常优秀的,但是还是有一些小坑无法避免。这是一个记录。START问题部署多个项目后,url路径冲突场景描述1.webapps下有两个项目projectA和projectB。两个项目除了管理信息接口外,还有安全验证机制。2、ProjectA没有前后端分离,所以静态资源也存在于java项目中。在静态资源中做接口请求时,不写包名,比如login,js代码会拼接服务器ip+端口+当前设置的url(/login),但不在/login前加/projectA,所以在本机测试是没有问题的,只有部署的时候才会出现这样的问题。这也是一个问题。下面来解决一下。3.ProjectB是一个正常运行的项目。对于场景2,解决方法是在tomcat中打开配置文件,在标签中添加,并设置为服务器的默认访问路径,这样可以避免包名,但是这个方法极其不正规并且不推荐。代码解释path和doBase一起表示指定的包路径,为了简单,直接卸载docBase即可。重启tomcat,测试通过ip+port可以直接访问包,但是访问其他包中的资源时,会出现url歧义。本来想访问projectB,但是映射到了projectA。只有部分url会出现这样的问题。那么我们的解决办法是再装一个tomcat,只部署需要直接路径映射的项目,所以回到tomcat所在目录,复制cp命令$>cp-rtomcat8.5/tomcat8.6/然后移动projectA在tomcat8.5到tomcat8.6。删除tomcat8。5中需要对tomcat8.6中的service.xml进行如下修改。更改shutdown对应的端口是8006,只要和tomcat8.5不一样,端口不冲突即可。更改请求对应的端口,原理同上标签中的内容复制过来,需要修改为对应的映射路径。这样才能让两个tomcat同时运行,启动和关闭不会互相影响。END