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: estWeb" debug="0" reloadble="true"/>
host节点是可以加的
<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">
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,配合下面的虚拟路径,可以直接影射服务器文件
日志
catalina.日期.log
启动日志
localhost.日期.log
监听器相关的日志
请求路径
catalina.out
linux上运行时标准输出和标准错误输出会被写到这里
webapp目录
发布网站应用的目录,是可修改的。
tomcat的工作目录,是tomcat把jsp转化成servlet的地方
总结
1、tomcat启动得时候,一次性读取配置文件,后面不会更改。
2、tomcat只是对资源的映射处理,不会把资源读进内存,如果运行时删除webapps目录下的文件,将会404。
3、修改server.xml要重启tomcat才能生效。