IDEA是如何部署tomcat项目的,了解一下它的实现原理
前言
在最初认识tomcat的时候,我知道部署web项目,就是把自己的项目打包成war然后往webapp里面一扔,tomcat就会自动将项目部署起来了,但是用IDEA的时候我总是很奇怪,它不是直接放到webapp面的,而是生成一个target目录,外加一个war文件。今天偶然间总算明白过来了,且听我慢慢道来。
tomcat部署项目的几种方式
1、war文件直接扔进webapp里面。这个方法是比较常见的了,就不多述了。server.xml中Host标签是有关于webapp的配置。
2、server.xml中配置context标签,通过context的配置,可以指定某一个web应用:比如这样:
<Context path="/A" docBase="B" />
- 1
这里代表的是虚拟路径为A,就是映射到ip:port/A, 项目的路径是B。
配置参数:
- path:虚拟路径。
- docBase:应用程序的物理路径。
- workDir:这个应用的工作目录,存放运行时生成的与这个应用相关的文件。
- debug:设定debug level, 0表示提供最少的信息,9表示提供最多的信息。
- privileged:设置为true的时候,才允许Tomcat的Web应用使用容器内的Servlet。
- reloadable:如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,可以在不重起tomcat的情况下改变应用程序,实现热部署。
- ntiResourceLocking 和antiJARLocking:热部署是需要配置的参数,默认false避免更新了某个webapp,有时候Tomcat并不能把旧的webapp完全删除,通常会留下WEB-INF/lib下的某个jar包,必须关闭Tomcat才能删除,这就导致自动部署失败。设置为true,Tomcat在运行对应的webapp时,会把相应的源文件和jar文件复制到一个临时目录里。
3、进入tomcat目录里面的conf/Catalina/localhost,新建一个xml文件,记住名字和path后面的要一致,是根据这个来确定项目名称的,Context标签的配置一样。
小结一下:
如果项目在webapp里面,那么你只要移除webapp包就可以了,这种做法不会在server.xml中和Catalina里面留下什么,如果是用别的方法就要注意了,移走项目的同时,需要移除相关的配置。
IDEA部署tomcat的原理
你知道IDEA是如何部署tomcat项目的嘛?在我最初的时候,我跟着网上的配置啪啪啪一顿操作,让服务器运行起来了,但是我却不知道它是如何运作的。为什么就能访问了呢?先看这里
/home/dream/apache-tomcat-9.0.11/bin/catalina.sh run
Using CATALINA_BASE: /home/dream/.IntelliJIdea2018.1/system/tomcat/Unnamed_day19_privilege_3
Using CATALINA_HOME: /home/dream/apache-tomcat-9.0.11
Using CATALINA_TMPDIR: /home/dream/apache-tomcat-9.0.11/temp
Using JRE_HOME: /usr/lib/jvm/jdk-9.0.4
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
Using CLASSPATH: /home/dream/apache-tomcat-9.0.11/bin/bootstrap.jar:/home/dream/apache-tomcat-9.0.11/bin/tomcat-juli.jar
- 1
- 2
- 3
- 4
- 5
- 6
- 7
这是截取的一段IDEA启动过程,一开始我也没有发现什么问题,但是如果我们终端启动tomcat的话对比看看.
不难发现,这个里面的区别就在于它的CATALINA_BASE,这个目录放的是工作目录,HOME是安装的位置,每一个tomcat实例都有自己的工作目录,包括conf、log、work等。分别放配置文件,日志,jsp->servlet的地方。打开tomcat文件我们也可以看见这些。
IDEA的tomcat项目发布方式
我觉得IDEA是做的比较好的,在我之前的eclipse时候它是直接发布到tomcat webapp里面的,并且在server.xml文件里面还配置了context标签,IDEA的做法我们可以看看。 tomcat配置文件路径图:
目录树结构:
这个上面的.0后缀文件我看了一下,它是原来tomcat的文件,复制了一份过来,用意不太知道,可能是IDEA它自己做了些修改吧。 xml文件:
不难看出IDEA采用的就是上面描述的第三种方式,在localhost里面配置上了xml文件映射项目的context。每搭建一个项目就生成单独的一个文件夹,多个项目之间彼此不干涉,也不干涉tomcat本身的文件夹。做得挺不错的。于是乎今天终于明白,它是怎么启动的了,在tomcat文件里面找不到项目的原因就在这。这么一来就搞清楚啦~挺好的。
上一篇: idea配置git步骤