tomcat9目录结构解析

tomcat目录结构

 

 

 启动

第一种方式

进入bin目录

点击startup.bat

如果启动出错会一闪而过

第二种方式

 .\catalina.bat run

启动后,即使产生错误信息,也会在控制台打印出来。比如

Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

就需要去配一下环境变量。

config目录

server.xml

端口配置

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

应用目录

  <Host name="localhost"  appBase="webapps"            unpackWARs="true" autoDeploy="true">

第一个主机名,第二个appBase是项目得目录,我们一般把要部署的项目放在webapps下。

现在尝试改个名字

   <Host name="localhost"  appBase="webappsTest"
            unpackWARs="true" autoDeploy="true">

把原来得文件夹改成

webappTest

重启tomcat,果然还是可以看到那只猫。

虚拟路径

为什么要配虚拟路径?

每次都要把项目放到webapp比较繁琐,且不灵活。

我们可以把项目放到其他地方,然后做一个映射。

在server.xml的Host节点配置如下信息

path是访问路径

docBase文件夹目录

<Context path="/hello" docBase="D:\testWeb" debug="0" reloadble="true"/>

host节点是可以加的

(需要配一下hosts文件)

<Host name="www.dayrain.com"  appBase="D:\dayrain"
            unpackWARs="true" autoDeploy="true">
        <Context path="/test" docBase="D:\dayrain" debug="0" reloadble="true"/>
      </Host>

默认主机

还可以设置默认主机

  <Engine name="Catalina" defaultHost="localhost">

 

catalina.properties

类加载

common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"

类加载顺序:Bootstrap ---> System ---> /WEB-INF/classes ---> /WEB-INF/lib/*.jar ---> Common

共用类库

该配置文件有两行配置

server.loader=
shared.loader=

可以这么设置

server.loader=${catalina.base}/server/classes,${catalina.base}/server/lib/*.jar
     
shared.loader=${catalina.base}/server/classes,${catalina.base}/server/lib/*.jar

同时需要在tomcat目录下创建 server和shared目录结构并将公用的、应用类放到里面。类加载顺序如下:

Bootstrap ---> System ---> /WEB-INF/classes ---> /WEB-INF/lib/*.jar ---> Common ---> Server ---> Shared

忽略扫描的jar包

tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\
annotations-api.jar,\
ant-junit*.jar,\
ant-launcher.jar,\
ant.jar,\
asm-*.jar,\
aspectj*.jar,\
bootstrap.jar,\
catalina-ant.jar,\
catalina-ha.jar,\
catalina-ssi.jar,\
catalina-storeconfig.jar,\
catalina-tribes.jar,\
catalina.jar,\
cglib-*.jar,\
cobertura-*.jar,\
commons-beanutils*.jar,\
commons-codec*.jar,\
commons-collections*.jar,\
commons-daemon.jar,\
commons-dbcp*.jar,\
commons-digester*.jar,\
commons-fileupload*.jar,\
commons-httpclient*.jar,\
commons-io*.jar,\
commons-lang*.jar,\
commons-logging*.jar,\
commons-math*.jar,\
commons-pool*.jar,\
dom4j-*.jar,\
easymock-*.jar,\
。。。。。。。。

启动时扫描的jar

tomcat.util.scan.StandardJarScanFilter.jarsToScan=\
log4j-taglib*.jar,\
log4j-web*.jar,\
log4javascript*.jar,\
slf4j-taglib*.jar

字符缓存设置

# String cache configuration.
tomcat.util.buf.StringCache.byte.enabled=true
#tomcat.util.buf.StringCache.char.enabled=true
#tomcat.util.buf.StringCache.trainThreshold=500000
#tomcat.util.buf.StringCache.cacheSize=5000

context.xml

有一句注释如下:

The contents of this file will be loaded for each web application

说的是被所有应用共享。此文件运行的时候,只要改变就会被tomcat扫描掉,可以在运行时更改配置。这里还可以配置数据源之之类的。

web.xml

这边的web.xml是全局生效的。

每个web工程下,也会有一个web.xml,这个是每个项目独享的。

先加载全局项目的web.xml、再加载独立的web.xml

这个文件夹里改个配置,可以实现比较好玩的功能

<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

把fasle改成true,配合下面的虚拟路径,可以直接影射服务器文件

 

lib目录

jar包

logs目录

日志

catalina.日期.log

启动日志

localhost.日期.log

监听器相关的日志

localhost_access_log.日期.txt

请求路径

catalina.out

linux上运行时标准输出和标准错误输出会被写到这里

webapp目录

发布网站应用的目录,是可修改的。

work目录

tomcat的工作目录,是tomcat把jsp转化成servlet的地方

总结

1、tomcat启动得时候,一次性读取配置文件,后面不会更改。

2、tomcat只是对资源的映射处理,不会把资源读进内存,如果运行时删除webapps目录下的文件,将会404。

3、修改server.xml要重启tomcat才能生效。

 

posted @ 2020-11-27 17:19  小楼夜听雨QAQ  阅读(479)  评论(0编辑  收藏  举报