idea war模式与war exploded模式区别

2,057

war模式:将WEB工程以包的形式上传到服务器tomcat的webapp下。

war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器 war exploed部署时,不会将war包部署到tomcat中,也就是说tomcat的webapps目录下不会出现当前项目的文件,如果将项目改为war部署的方式,application context设置为/,tomcat也不会将项目部署到webapps中,因为application context就是项目再webapps路径下项目的根目录名。 

好奇war exploded时是如何进行热部署,也没有将包存放到tomcat中,如何运行。 Tomcat 配置成War exploded,在运行时idea不会把项目放到tomcat webapps的路径下,而是复制一份足够的配置文件,到windows ${user.home}/.IntelliJIdea/System/tomcat或mac /Users/xxxxx/Library/Caches/IntelliJIdea2019.2/tomcat/Unnamed_itemplatform/conf/Catalina/localhost目录下: 也就是说每个项目都有属于自己的一份tomcat配置,互不干扰。 每个项目的配置文件夹中有一个/conf/Catalina/localhost/Root.xml。path是指在访问此项目时,是否需要添加额外的路径,如果为空则直接使用域名或者ip就可以访问到该项目:127.0.0.1,这个值在idea中的Run/Debug Configurations中可以配置: docBase是指要运行的项目的部署位置,F:\project\WiseEnergy\WiseEM-D\就是源代码的位置,target是由maven构建后生成的,\target\webapps\WiseEM-D目录就是maven build完成之后生成的项目。 也就是说,整个项目运行过程为:首先maven build项目,将构建结果写到项目的target目录下,然后idea复制一份tomcat的配置文件到${user.home}/.IntelliIdea/system/tomcat中,之后启动tomcat安装目录下的catalina.bat文件,tomcat读取配置文件,找到项目位置,然后就运行起来。 war exploded支持热部署的原因,是由于该模式下不是直接把文件夹、jsp页面、classes等等移到tomcat\webapps\下。只要修改其后台和前端代码或者配置文件,F:\project\WiseEnergy\WiseEM-D\target\webapps\对应的目录下的文件也会进行相应的改变,tomcat会运行此目录下的项目,为此可以读取到最新的源文件,因此这种方式支持热部署。 war 和war exploded的不同模式下获取的上下文路径 String contextPath=request.getSession().getServletContext().getRealPth("/"); war模式是获取tomcat的位置 war exploded是获取项目target的位置。