Tomcat目录层次结构
$CATALINA_HOME
地址指的是Tomcat的安装根目录。如果启用了多实例,那么每个实例可以设置一个$CATALINA_BASE
路径。需要在操作系统中设置(如win在PATH下添加)。根目录下几个关键的文件夹:
- bin:存放启动和关闭Tomcat的脚本文件(startup, shutdown等)
- conf:存放Tomcat服务器的配置文件(如container的配置文件server.xml)
- logs:存放日志文件
- webapps:web应用所在的目录
Tomcat部署Web应用方法
- Tomcat自动部署
将YourProject目录拷贝到$CATALINA_HOME/webapps下,然后启动服务器就可以了,Tomcat启动时将自动加载应用。访问地址如下:http://localhost:8080/YourProject/
- 修改Server.xml文件部署
在$CATALINA_HOME/conf/[enginename]/[hostname]
文件夹下添加配置文件(如$CATALINA_HOME/conf/catalina/localhost
),xml文件以项目名命名。一个名为manager(安装时自带的示例,目录在${catalina.home}/webapps
下)的web应用可以通过这种方式配置。
<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.0\.0\.1" />
</Context>
- 像IntelliJ IDEA这样的IDE支持在Tomcat上部署,操作很方便。还有种方式是使用maven的Tomcat插件。在pom.xml文件中配置:
<!-- 本地环境使用 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<hostName>localhost</hostName> <!-- Default: localhost -->
<port>8080</port> <!-- 启动端口 Default:8080 -->
<path>/api</path> <!-- 访问应用路径 Default: /${project.artifactId}-->
<uriEncoding>UTF-8</uriEncoding> <!-- uri编码 Default: ISO-8859-1 -->
</configuration>
</plugin>
在命令行中使用tomcat7:run命令运行当前项目,使用tomcat7:deploy部署当前项目。
web应用
一个web应用由多个静态web资源和动态web资源组成,组成web应用的这些文件会由一个目录组织起来,这个目录称为web应用所在目录。Tomcat等应用服务器把主机上的资源映射到服务器对外提供的访问路径上。
web应用的组成结构:
main---------------------------Web应用所在目录
|----html、jsp、css、js等文件,根目录下的文件外界可以直接访问
|----WEB-INF目录
|---------classes目录(java类)
|---------lib目录(java类运行所需的jar包)
|---------web.xml(web应用的配置文件)
WEB-INF 这个目录下的文件外界无法直接访问,由web服务器负责调用。
Tomcat 的总体结构
参考的文章介绍的是Tomcat 5,可能不适合Tomcat 9
Tomcat 的总体结构
Tomcat 的心脏是两个组件:Connector 和 Container。Connector 主要负责对外交流,Container 主要处理 Connector 接受的请求,处理内部事务。而Service 只是在 Connector 和 Container 外面多包一层,把它们组装在一起,向外面提供服务,一个 Service 可以设置多个 Connector,但是只能有一个 Container 容器。
Tomcat 中组件的生命周期是通过 Lifecycle 接口来控制的,组件只要继承这个接口并实现其中的方法就可以统一被拥有它的组件控制了。最高的组件是 Server,可以控制 Tomcat 中所有组件的生命周期。控制生命周期的 Start 和 Stop 方法,还有一个监听机制。