Tomcat和IDEA
笔者安装的tomcat目录为: D:\programfiles\apache-tomcat-8.5.55-windows-x64\apache-tomcat-8.5.55
在IDEA中创建maven web项目
其中,java目录和resources目录是自己建立的
配置Tomcat
引入相应Tomcat的jar包
运行,浏览器会自动打开网页,显示 Hello World.
到Tomcat的安装目录,发现没有我们的项目。
我们项目在哪里呢?
打开IDEA项目目录
发现有有个target目录,这个目录是在idea设置的输出目录,打开该目录
最下面就是我们的项目,发现其正好是Tomcat部署应有的目录格式
我们在IDEA控制台可以发现最初打印了
D:\programfiles\apache-tomcat-8.5.55-windows-x64\apache-tomcat-8.5.55\bin\catalina.bat run [2020-09-07 07:00:30,152] Artifact manager-web:war exploded: Waiting for server connection to start artifact deployment... Using CATALINA_BASE: "C:\Users\My\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Unnamed_crowdfunding-system" Using CATALINA_HOME: "D:\programfiles\apache-tomcat-8.5.55-windows-x64\apache-tomcat-8.5.55" Using CATALINA_TMPDIR: "D:\programfiles\apache-tomcat-8.5.55-windows-x64\apache-tomcat-8.5.55\temp" Using JRE_HOME: "D:\programfiles\jdk8" Using CLASSPATH: "D:\programfiles\apache-tomcat-8.5.55-windows-x64\apache-tomcat-8.5.55\bin\bootstrap.jar;D:\programfiles\apache-tomcat-8.5.55-windows-x64\apache-tomcat-8.5.55\bin\tomcat-juli.jar"
Throughout the docs, you’ll notice there are numerous references to CATALINA_HOME. This represents the root of your Tomcat installation. When we say, “This information can be found in your CATALINA_HOME/README.txt file” we mean to look at the README.txt file at the root of your Tomcat install. Optionally, Tomcat may be configured for multiple instances by defining CATALINA_BASE for each instance. If multiple instances are not configured, CATALINA_BASE is the same as CATALINA_HOME.
CATALINA_HOME 是Tomcat安装的根目录,全局唯一
CATALINA_BASE 每个Tomcat实例会创建一个,可以有多个
IDEA创建了自己的Tomcat实例。
这个实例的相关文件就在上面的BASE目录中
打开conf下的配置文件server.xml
<Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" /> </Realm> <Host name="localhost" appBase="D:\programfiles\apache-tomcat-8.5.55-windows-x64\apache-tomcat-8.5.55\webapps" unpackWARs="true" autoDeploy="true" deployOnStartup="false" deployIgnore="^(?!(manager)|(tomee)$).*"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service> </Server>
发现没有IDEA项目路径的踪影
接着找,在conf/Catlina/localhost下发现有ROOT.xml
<Context path="" docBase="D:\gitprojects\crowdfunding-system\manager-web\target\manager-web" />
正是我们想要的项目路径
我们设置虚拟目录和主目录,都会在.../conf/Catalina/localhost目录下生成相应的xml文件,因此,当我们在server.xml里面删除了主目录和虚拟目录的设置后,如果系统还没有生效,这时候我们就要察看一下这个目录下的xml文件是不是已经被删除了,如果没有被删除,他还是对tomcat起作用的,我们必须手动删除。
通过测试我发现,每当我们访问一个地址的时候,tomcat首先是到.../conf/Catalina/localhost目录下去察看有没有存在主目录或虚拟目录的xml文件,如果有xml文件,就按xml里的路径进行访问,如果没有xml文件,就到server.xml文件里去察看是否配置context标签,如果配置了context标签,则在.../conf/Catalina/localhost目录下生成一个对应的xml文件,以便于下次直接验证而不再访问server.xml,与此同时打开context里指定的路径,如果server.xml里没有配置context标签,则返回访问错误页面。
可以直接在.../conf/Catalina/localhost下建立一个xml文件,用于主目录或者虚拟目录,而不需要去修改server.xml就可以达到配置主目录和虚拟目录的目的,具体xml的格式可以如下:
<?xml version='1.0' encoding='utf-8'?> <Context crossContext="true" docBase="E:/tomcatApp/JeasyCMS" path="" reloadable="true"> </Context>
具体是主目录的配置还是虚拟目录的配置取决于path的值。另外主目录文件名必须是ROOT.XML(root大写)