Tomcat和IDEA

笔者安装的tomcat目录为: D:programfilesapache-tomcat-8.5.55-windows-x64apache-tomcat-8.5.55

在IDEA中创建maven web项目

 

 其中,java目录和resources目录是自己建立的

配置Tomcat

 引入相应Tomcat的jar包

 运行,浏览器会自动打开网页,显示 Hello World.

到Tomcat的安装目录,发现没有我们的项目。

 我们项目在哪里呢?

打开IDEA项目目录

发现有有个target目录,这个目录是在idea设置的输出目录,打开该目录

最下面就是我们的项目,发现其正好是Tomcat部署应有的目录格式

 我们在IDEA控制台可以发现最初打印了

D:programfilesapache-tomcat-8.5.55-windows-x64apache-tomcat-8.5.55incatalina.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:UsersMyAppDataLocalJetBrainsIntelliJIdea2020.1	omcatUnnamed_crowdfunding-system"
Using CATALINA_HOME:   "D:programfilesapache-tomcat-8.5.55-windows-x64apache-tomcat-8.5.55"
Using CATALINA_TMPDIR: "D:programfilesapache-tomcat-8.5.55-windows-x64apache-tomcat-8.5.55	emp"
Using JRE_HOME:        "D:programfilesjdk8"
Using CLASSPATH:       "D:programfilesapache-tomcat-8.5.55-windows-x64apache-tomcat-8.5.55inootstrap.jar;D:programfilesapache-tomcat-8.5.55-windows-x64apache-tomcat-8.5.55in	omcat-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:programfilesapache-tomcat-8.5.55-windows-x64apache-tomcat-8.5.55webapps" 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 &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

发现没有IDEA项目路径的踪影

接着找,在conf/Catlina/localhost下发现有ROOT.xml

<Context path="" docBase="D:gitprojectscrowdfunding-systemmanager-web	argetmanager-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大写)

原文地址:https://www.cnblogs.com/aidata/p/13628944.html