一、在Tomcat部署项目的方式:
-
直接部署到${TOMCAT_HOME}/webapps下
-
在${TOMCAT_HOME}/conf/server.xml中Host标签下添加Context标签,如:
<Context path="/A" docBase="B" />
-
在conf/Catalina/localhost 新建ROOT.xml文件,用来链接项目。文件内容是一个Context标签,原理同方式2。
当我们在intellij中开发web项目时,能够直接运行项目,并通过客户端访问项目中的web资源。这说明intellij已经帮我们把项目部署到了Tomcat。但检查上述三种方式的路径却均未发现web项目。
于是我通过网上调研和自己实验将intellij帮我们部署项目的过程了解清楚了,写下这篇记录,引出该记录的第二个部分:
二、intellij帮我们部署项目的方式:
首先,需要了解一个前置知识:
Tomcat有两个核心目录 CATALINA_HOME和CATALINA_BASE
CATALINA_HOME是Tomcat的安装目录,如下图:
CATALINA_BASE是工作目录。当我们不使用intellij启动项目,自己运行bin文件夹里的startup.sh来启动Tomcat时,CATALINA_BASE默认就是CATALINA_HOME。
而intellij做的事情,恰恰就是修改了CATALINA_BASE,也就是说改变了Tomcat的默认工作路径。并将所需要的文件如conf复制过来。这样一来,在新的工作路径中也具备了启动Tomcat服务器的条件。这样还没完,启动Tomcat以后,intellij是怎么部署项目的呢?其实就是通过最开始提到的方法3,在conf/Catalina/localhost 新建ROOT.xml文件,用来链接项目,如下图:
所以intellij为我们部署项目其实就是运用了方法3,只不过是在一个新的工作路径下完成的操作。
在了解intellij部署项目的方式后,产生疑问:用新的工作路径,有什么好处呢?
其实Tomcat可以有多个工作路径,同时运行多个Tomcat实例(当然要记得修改端口号,避免重复)。而这些实例都共享了同一个安装路径CATALINA_HOME里的bin和lib两个核心文件夹,这样就省去了把这两个文件夹复制到所有工作路径的这种繁琐且不易维护的操作。
NOTE:一个细小发现:在maven的输出路径中,java文件都已经被编译完成,但jsp文件都还没有改变。如下图:classes文件夹里就是所有编译好的class文件
jsp文件是何时被转换成java文件以及编译成class的呢?每当我们访问一个新的jsp页面时,在Tomcat的工作目录里,就会有对应的java和class文件出现,如下图:
更多相关的有趣链接:
不通过intellij,在一个新的工作路径下运行Tomcat实例:https://blog.csdn.net/UNIONDONG/article/details/88904609?utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~default-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~default-1.no_search_link