参考:http://m.blog.csdn.net/z69183787/article/details/78030857web
之前一直很好奇,在idea中运行tomcat,把项目部署到其中,运行起来,而后我去tomcat目录下去看,根本找不到我部署的项目 那个人项目是咋运行的啊… - -spring
后来我就查啊查 ,纠结啊纠结,而后大概知道是咋回事了:tomcat
在idea中配置的tomcat,在运行时idea不会把项目放到该路径下,而是复制一份足够的配置文件,到 ${user.home}/.IntelliJIdea/system/tomcat
目录下:app
也就是说每一个项目都有属于本身的一份tomcat配置,互不干扰。webapp
每一个项目的配置文件夹中有一个 /conf/Catalina/localhost/ROOT.xml
文件,内容以下:jsp
<?xml version="1.0" encoding="UTF-8"?> <Context path="" docBase="D:\work\项目\target\xxx-web" />
其中,path是指在访问此项目时,是否须要添加额外的路径,若是为空,则直接使用域名或者ip就能够访问到该项目:127.0.0.1。这个值在ieda中的Run/Debug Configurations中能够配置:maven
docBase是指要运行的项目的部署位置,D:\work\项目
就是个人项目源代码的位置,target是由maven构建后生成的,D:\work\项目\target\xxx-web
目录就是maven build完成以后生成的项目,结构以下:ide
而idea启动tomcat的命令为:gradle
也就是说,整个项目运行过程为:首先maven build项目,将构建结果写到项目的target目录下,而后idea复制一份tomcat的配置文件到${user.home}/.IntelliJIdea/system/tomcat
中,以后启动tomcat安装目录下的catalina.bat文件,tomcat读取配置文件,找到项目位置,而后就运行起来了。ui
在idea中运行tomcat,把项目部署运行起来,而后我去tomcat目录下去看,找不到我部署的项目 那个人项目是怎么运行起来的?
说明一下:这里是使用tomcat 部署成war exploded 而不是war包。
war exploded模式是直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。所以这种方式支持热部署,通常在开发的时候也是用这种方式。
在平时开发的时候,使用热部署的话,应该对Tomcat进行相应的设置,这样的话修改的jsp界面什么的东西才能够及时的显示出来。
如上,将两处都修改为Update resources便可。
webapps下面文件夹都翻了一遍,都没有发现部署的项目。
去work文件夹下也看了一遍,是空的。
后来发现,在idea中配置的tomcat,在运行时idea不会把项目放到本身的webapps路径下,而是复制三份文件到 ${user.home}/.IntelliJIdea/system/tomcat 目录下的各自项目。
咱们进入该目录,看到以下(名称是经过咱们的项目名转化而来):
也就是说每一个项目都有属于本身的一份tomcat配置,互不干扰。
咱们进入其中一个项目下,看到以下:(在本身的tomcat安装目录下是看不到日志的,日志在这里,还有一些配置文件)
每一个项目的配置文件夹中有一个 /conf/Catalina/localhost/ROOT.xml 文件,内容以下:
其中,path是指在访问此项目时,是否须要添加额外的路径,若是为空,则直接使用域名或者ip就能够访问到该项目:127.0.0.1。这个值在ieda中的Run/Debug Configurations中能够配置:(即Application context)
若是如今我在Application context加上:/springSecurityDemo
Server这边会自动加入:springSecurityDemo/
这时候,咱们运行tomcat以后,在conf/Catalina/localhost没有发现ROOT.xml,而是springSecurityDemo.xml文件,内容以下:
这时候项目的访问路径是:http://localhost:8145/springSecurityDemo/
docBase是指要运行的项目的部署位置,/myProject/springSecurityDemo 就是个人项目源代码的位置,build是由gradle构建后生成的,gradle build完成以后生成的项目,结构
以下:
而idea启动tomcat的命令在这里:
整个项目运行过程是:首先gradle build项目,将构建结果写到项目的build目录下,而后idea复制一份tomcat的conf、logs和work文件夹到${user.home}/.IntelliJIdea/system/tomcat 中,以后启动tomcat安装目录下的catalina.sh文件,tomcat读取配置文件,找到项目位置,而后就运行起来了。
-------------------------------------------------------------------------------------
若是是使用tomcat 部署成是war包。那么会不会就能在本身安装的tomcat中找到呢?
刚开始我将项目改成war部署的方式,可是运行以后tomcat中始终没有项目的文件。后来发现若是将当前的Application context设置为’/’,那么
tomcat也不会将项目部署到webapps中,由于这个至关于你项目的根路径。后来通过实践,发现这个Application context就是你项目在webapps路径下项目的根目录名。