做web项目,最常用的服务器就是Apache的tomcat。虽然一直在用tomcat,但都是仅限在使用的阶段,一直没有深入学习过。想深入学习tomcat,首推的肯定是官网: (虽然全是英文,看起来比较晦涩,但还是推荐大家在官网学习,一方面权威,另一方面锻炼了自己的英文能力。博主自己英文不好,但仍坚持看官网。)
开始了解一下tomcat的内部结构,博主用的tomcat版本是:apache-tomcat-8.0.3-windows-x86,解压之后打开,里面是:
先看一下除了文件夹以外的其他文件。
LICENSE顾名思义就是许可证,里面记录了tomcat的一些条款等等。
NOTICE里面记录了tomcat的新的通知,公告。
RELEASE-NOTES这里面记录的是发行版本的说明,一些捆绑的API,新特性等等。
RUNNING.txt记录了tomcat的运行环境以及怎样配置参数,变量,启动等等。
================华丽的分割线====================
下面开始介绍文件夹里面的内容。
bin文件夹
bin文件夹下面放的是可执行性文件,其中:bat/exe文件是windows下可执行的脚本文件。sh文件时Linux/Unix下可执行的脚本文件。其中还有一些jar文件,后面将会说到。
下面是bin文件夹下所有文件:
开始一一介绍。
bootstrap.jar 从文件名可以看出这个jar包是引导程序jar包,是tomcat的入口。
catalina.bat 这个脚本就比较重要了。这个脚本完成了很多基本操作,如启动
关闭等,catalina.bat都参与其中。
catalina.sh文件作用同catalina.bat,只不过在Linux/Unix系统下运行。
catalina-tasks.xml 配置文件,主要是引入各种jar包。
commons-daemon-native.tar.gz Linux/Unix下。
configtest.bat 检测语法是否正确的脚本文件。
cpappend.bat 这个脚本可以这样理解,classpath(cp)append就是将指定参数添加到classpath里面。
digest.bat 博主暂时也没弄清。
service.bat 启动tomcat服务。和注册tomcat服务那块有关系。
setclasspath.bat 设置classpath的脚本,在catalin.bat脚本中调用,可以设置java_home,jre_home等。
shutdown.bat 主要是检查catalina.bat 执行所需环境,并调用catalina.bat 批处理文件关闭tomcat服务。
startup.bat 主要是检查catalina.bat 执行所需环境,并调用catalina.bat 批处理文件启动tomcat服务。
tcnative-1.dll 加速器组件,可以提高性能。(也是在网上搜到的)
tomcat8.exe
tomcat8w.exe
tomcat-juli.jar Apache Tomcat由一个自己的实现了java.util.logging多个关键元素的实现。这个实现被称为“JULI”。实现的核心组件是定制化的LogManager,可以获取运行在Tomcat中的不同web应用(以及不同的class loader)。他支持为应用配置单独的日志配置。当有web应用从内在中是被卸载时,会接到Tomcat的通知,以便他所引用的类可以被清除,避免内存泄露。
tomcat-native.tar.gz 里面放的是tomcat本地的library。
tool-wrapper.bat 工具包装脚本
version.bat 一般是用来判断系统版本获取系统版本信息等。
conf(configurator)文件夹
conf(configurator)文件夹下面放的是配置文件
catalina.policy tomcat策略文件
catalina.properties catalina配置文件
context.xml tomcat公用的环境配置,也可以在server.xml中配置<context />
logging.properties 日志配置文件
server.xml 相当重要的配置,端口、线程池等都需要在这里配置。
元素名 | 属性 | 解释 |
server | port | 指定一个端口,这个端口负责监听关闭tomcat的请求 |
shutdown | 指定向端口发送的命令字符串 | |
GlobalNamingResources | 服务器的全局JNDI资源,可以有子标签<Resource></Resource> | |
Executor(线程池,一个或多个Connector可以共享此线程池) | name | 线程池名称,名称必须唯一 |
namePrefix | 线程的名字前缀,用来标记线程名字的,这样每个线程就用这个前缀加上线程编号了,比如 catalina-exec-1 、catalina-exec-2 | |
maxThreads | 允许的最大线程池里的线程数量,默认是200,大的并发应该设置的高一些,反正只是限制而已,不占用资源 | |
minSpareThreads | 最小的保持活跃的线程数量,默认是25.这个要根据负载情况自行调整了。太小了就影响反应速度,太大了白白占用资源 | |
maxIdleTime | 最小的保持活跃的线程数量,默认是25.这个要根据负载情况自行调整了。太小了就影响反应速度,太大了白白占用资源 | |
threadPriority | 线程的等级。默认是Thread.NORM_PRIORITY | |
service | name | 指定service的名字 |
Connector (表示客户端和service之间的连接) | port | 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求 |
minProcessors | 服务器启动时创建的处理请求的线程数 | |
maxProcessors | 最大可以创建的处理请求的线程数 | |
enableLookups | 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址 | |
redirectPort | 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号 | |
acceptCount | 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理 | |
connectionTimeout | 指定超时的时间数(以毫秒为单位) | |
Engine (表示指定service中的请求处理机,接收和处理来自Connector的请求) | name | |
defaultHost | 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的 | |
jvmRoute | ||
host (表示一个虚拟主机、并且可以包含Context子节点配置虚拟目录) | name | 指定主机名 |
appBase | 应用程序基本目录,即存放应用程序的目录 | |
unpackWARs | 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序 | |
autoDeploy | 自动部署 | |
xmlValidation | 是否验证xml | |
xmlNamespaceAware | ||
Realm (表示存放用户名,密码及role的数据库) | className | 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口 |
Context(host子节点配置虚拟目录) | path | 虚拟目录名称 |
docBase | 物理路径 | |
Debug | Debug模式 | |
Reload | True 重新加载,修改后自动加载 |
上面是server.xml元素的含义。基本配置都在这里了。
tomcat-users.xml tomcat配置用户的文件。是指定控制台用户、角色、密码的。
<tomcat-users>
<role rolename="manager"/><role rolename="admin"/><user username="admin" password="123456" roles="admin,manager"/></tomcat-users>通过以上配置,可以为tomcat添加具有管理员权限的用户。
web.xml 访问tomcat入口。配置加载类和资源,如欢迎页等。
lib文件夹
lib文件夹下面放的是tomcat提供的jar包,资源库文件。tomcat运行需要。
Log文件夹
log文件夹存放tomcat日志文件
Temp文件夹
temp文件夹存放临时文件
webapps文件夹
webapps文件夹是Tomcat发布web项目的目录,默认存放了文档,examples,主机配置等文件。
work文件夹
存放jsp编译后的class文件。