tomcat启动过程
配置tomcat
首先:添加系统变量 CATALINA_HOME : C:\apache-tomcat-8.0.41
其次:添加环境变量 path : %CATALINA_HOME%\bin
启动tomcat,关注打印的日志
C:\Users\chenyuchao>catalina start
Using CATALINA_BASE: “C:\apache-tomcat-8.0.42”
Using CATALINA_HOME: “C:\apache-tomcat-8.0.42”
Using CATALINA_TMPDIR: “C:\apache-tomcat-8.0.42\temp”
Using JRE_HOME: “C:\Java\jdk1.8.0_101”
重点关注CATALINA_HOME、CATALINA_BASE这两个目录,分别是tomcat的安装目录(也就是所有必要依赖)和工作目录(包括conf、logs、temp、webapps、work和shared目录)。主要是多实例部署tomcat(安装一个,运行多个)。
工程构建原理
回到我们idea,我们部署tomcat并启动后,如果仔细观察过的话,会发现在webapps上没有我们的工程,我们的工程去哪了呢?
我们在idea启动tomcat时注意观察日志:
Using CATALINA_BASE: "C:\Users\c00452743\.IntelliJIdea2019.2\system\tomcat\tomcat8_game"
Using CATALINA_HOME: "D:\software\apache-tomcat-8.5.55"
也就是工作目录被放置在了C:\Users\c00452743.IntelliJIdea2019.2\system\tomcat\tomcat8_game,这是idea的一个默认行为,进入此文件夹观察会发现结果跟上述描述一致:
再定位到该目录下conf/Catalina/localhost/servletest.xml
会看到如下配置:
<Context path="/servlettest" docBase="D:workspace\servlettest\target\servlettest-1.0-SNAPSHOT" />
这个配置其实就是指定web应用的文件路径,再仔细观察我们在这个工作目录下并没有发现我们的class文件和资源文件,这就是因为idea自动将我们的文件路径定位到我们配置的输出路径(默认是项目对应的路径)
打开D:workspace\servlettest\target\servlettest-1.0-SNAPSHOT,就可以看到我们编译后的所有文件以及第三方依赖了。
至此我们大致了解了idea整个部署tomcat的原理,对于问题定位也不用一头乱麻,另外再补充下几个细节:
配置tomcat时,在Server-Open browser的地方有个URL,这是指启动成功自动打开的一个页面
-
在配置Deployment时,我们选择包部署的时候,点击'+'添加artifacts会出现两种一种是servlettest:war还有一种是servlettest:war exploded。
这两个有什么区别呢,我们上面看到的Context是,包括exploded的,下面是直接war模式的:
<Context path="/servlettest" docBase="D:\workspace\git\CITest\servlettest\target\servlettest-1.0-SNAPSHOT.war" />
区别应该能看出来,一个是servlettest-1.0-SNAPSHOT文件夹,一个是servlettest-1.0-SNAPSHOT.war包,因此他们的区别是前者支持热部署,后者是先打包再部署,也就是修改的时候不能热加载,一般开发过程中使用exploded的方式