1.Tomcat部署时war和war expolded的区别
问题场景:学习VUE的过程中,使用Axios接收后端数据,利用脚手架创建WEBAPP后,配置Tomcat模板的过程中,需要设置导出包。在Depoyment下,有两种选项:1.war包 2.war expolded包,早已经忘了当时老师讲的时候是怎么回事,于是想分析二者的区别。
解决办法:https://www.pianshen.com/article/18231652322/
https://blog.csdn.net/xlgen157387/article/details/56498938
根据CSDN的解决办法说War和war exploded最后获取的地址是不一样的,于是我测试了一下
测试前提:我的项目地址为:H:\ideaproject\blog
Tomcat地址为:H:\XXX\JAVA工具\apache-tomcat-8.5.56-windows-x64
Request.getSession().getServletContext() 获取的是Servlet容器对象,相当于tomcat容器了。getRealPath("/") 获取实际路径,“/”指代项目根目录,
String contextPath = request.getSession().getServletContext().getRealPath("/");
1.1二者区别
war模式:将WEB工程以包的形式上传到服务器 ;war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器;
1.2war模式
war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布;工程target目录下会生成war包, 并且解压后的war包会被部署到tomcat的webapp 目录下注意:如果application-context 设置为 /, tomcat目录下不会有解压后的war文件,只有指定文件目录,才会生成文件夹,这个文件夹作为项目的根目录
1.2.1war模式下项目的相对路径
1.3war exploded模式
war exploded模式是直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。在平时开发的时候,使用热部署的话,应该对Tomcat进行相应的设置,这样的话修改的东西才可以及时的显示出来。如下图所示:
1.3.1war exploded模式项目的相对路径
1.4 小知识点:怎么增加项目热部署
1.4.1增加依赖
<dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-devtoolsartifactId> <version>2.4.1version> dependency>
1.4.2设置自动编译
第一种:Ctrl+F9(只能在IDEA中刷新一次)第二种:进入setting 搜索compiler 勾选 Build Project automatically
1.4.3设置项目运行时自动编译
Ctrl+shift+a搜索registry勾选compiler.automake.allow.when.app.running*(如果没有可不选)
1.5结论
IntelliJ IDEA
它优秀的地方就是在于此,每创建一个新的WEB项目都会独立出一个TOMCAT
服务, 其实最常用的是xxxx exploded
这个包,它是在Tomcat
运行时实际布署的内容,另外一个war
一般没有找到它的输出地方;选exploded 才能让调试的时候及时修改的资源重载;
经过后来资料的搜索,具体的加载位置是由 tomcat catalina.base决定的,这个值是Idea在启动的时候设置的。对于相对路径问题暂时保持疑问。