war和war exploded的区别
使用IDEA配置Tomcat服务的时候,在 Select Artifacts to Deploy 选项中相同项目名有war和 war exploded 两种模式,之前只是傻乎乎的随机选一个,知其然而不知其所以然。今天探究一下二者的区别。
-
war模式:将web工程以war包的形式上传到服务器;
-
war exploed模式:将web工程以当前文件夹的位置关系上传到服务器。
通俗地说,war模式先打成war包,然后再发布到Tomcat的ROOT下。所以选择这个模式后,你再看下你的tomcat的root文件夹下,是刚打成的项目。war exploded模式只编译生成target,然后把当前的target文件夹的位置关系上传到服务器,没有打包到tomcat的ROOT下。因此这种方式支持热部署,一般在开发的时候也是用这种方式,关于热部署,下面详细介绍一下。
热部署
在平时开发的时候,每次修改代码都需要重启一次Tomcat的确不方便,如果使用热部署,可以大大减轻工作量,此时应该对Tomcat进行相应的设置,这样的话修改的jsp界面什么的东西才可以及时的显示出来。需要在Tomcat做如下设置:
-
on ‘update‘ action:当用户主动执行更新的时候更新 快捷键:Ctrl + F9
-
on frame deactication:在编辑窗口失去焦点的时候更新
你可以根据自己的需求进行设置,我这里两个都有设置。
然后启动IDEA的自动编译功能。Intellij IDEA默认关闭了自动编译,在Setting中找到 Build,Execution,Deployment => Compiler,勾选Build Project automatically。
on frame deactivation热部署缺点:基于JVM提供的热加载仅支持方法块内代码修改,只有在debug模式下,并且idea失去焦点时才会触发热加载,相对加载速度缓慢。
如果你的工程中没有选项 Update classes and resources ,那么,只能更新classes文件中的变动,并不能更新静态文件中的变动。
出现这种选项情况的原因是在配置Deployment时选择了包含war的包,如全部都是war exploded则不会出现这种情况。召唤Update classes and resources的方式:先remove当前工程所有的Artifacts,再次添加,添加的时候在Artifact清单中仅仅选择工程名称后面有 exploded的选项。
Reference
-
https://www.cnblogs.com/hhhd/p/6640875.html
-
https://www.jianshu.com/p/5719458486f