java项目发布后到Tomcat时,总是带一层路径
参考文章:java 线上项目访问项目 会多一层项目根路径
根据参考文章写的这篇文章,部分文章细节有完善和改动
在Java Web
应用中,当你把应用发布到Tomcat
时,如果应用的web.xml
配置文件中的<context-root>
元素被设置成了非根路径,或者你在Tomcat
的server.xml
中配置了虚拟目录,那么Tomcat
在访问这个应用时就会要求通过这个路径加以访问。
例如:
我打了一个war包,
包名是holletomcat,
那么我访问的时候
就需要:http://www.tomcat9073.com:8080/holletomcat/index.html
但是我想:http://www.tomcat9073.com:8080/index.html
让中间不带holletomcat
解决方案1:修改 server.xml文件里的Host 节点
不希望通过虚拟路径访问应用,可以在<Host>
标签内部移除或修改<Context>
元素,确保应用的路径设置为path=""
, 这样就可以通过IP或域名直接访问应用。
- 相关文章1:tomcat的server.xml文件在什么地方?
- 相关文章2:java的war包项目部署上线后怎么配置域名?
如果你是docker里的tomcat
/usr/local/tomcat/conf/server.xml
找到后在Host
节点下增加Context
;docBase
内容是你的包名;
代码如下:
<Host name="www.tomcat9073.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="holletomcat" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
解决方案2:保持项目开发时的请求和部署时的请求路径一致
在application.yml
中配置多一层请求路径holletomcat
,
线下开发的请求路径就成为:http://localhost:8080/chassis/getuserinfo
server:
port: 8080
servlet:
context-path: /holletomcat
解决方案3:不想修改线下的路径,那只能修改线上Tomcat的配置了 有两种解决方法
这个我没有试
这个我没有试
这个我没有试
原理:Tomcat
的默认根目录是ROOT
,实际上ROOT
这个项目在实际生产环境是没有用的,所以我们可以用我们的项目覆盖ROOT
项目
操作过程:
- 删除
ROOT
下所有文件及文件夹 - 把我们项目的
war包
解压后,项目目录下的所有文件和子目录都拷贝到ROOT
目录下即可
或者有更狠的一招:直接删掉ROOT目录,然后把我们的项目打包名称改成ROOT.war
,放到webapps
下就行
解决方案4:修改web.xml
该方案由文心一言提供
确保<context-root>
元素的内容是空或者是/
,这样应用就会被部署为根应用。
<context-root>/</context-root>
解决方案5:修改虚拟目录
该方案由文心一言提供
你也可以通过Tomcat的管理界面,在"Host Manager"中通过图形化界面修改虚拟目录。
确保在修改配置后重启Tomcat使设置生效。