简介
Tomcat 是Web应用服务器 ,等于servlet容器+HTTP web服务器,实现一些J2EE包括Java Servlet、JSP页面、Java EL和websocket,还有纯java的http web server。项目早期4.0时名称叫catalina,后来更名为Tomcat,内置servlet容器默认名称还是叫catalina。有很多商业的java应用程序服务器(如JBoss和JOnAS)都内嵌了优化后的tomcat。 tomcat结构图
混淆:常见Web容器与应用服务器区别及对比
1)Apache:Tomcat和Apache(c语言实现)一样都具有处理HTML页面的功能,但它还是一个Servlet和JSP容器。不过Tomcat处理静态HTML的功能不如Apache,所以经常是把两者结合起来使用,Apache作为HTTP Web服务器,Tomcat作为Web容器。
2)web服务器:web服务器不单是支持http服务,还可以支持如ftp服务等,tomcat只是http web服务器。
配置文件
- server.xml:Tomcat的主配置文件,包含Service,Connector,Engine,Realm,Valve,Hosts主组件的相关配置信息
- web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息
- tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件 在Tomcat中添加/删除用户
- catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力
- catalina.properties:Tomcat内部package的定义及访问相关的控制,也包括对通过类装载器装载的内容的控制Tomcat6在启动时会事先读取此文件的相关设置
- logging.properties:Tomcat通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息, 可以用来定义日志记录的组件级别以及日志文件的存在位置等;
- context.xml:每个webapp都有其配置文件,通常位于webapp目录下的WEB-INF目录中,通常用于定义会话管理器、Realm以及JDBC等; 此配置文件是用于为部署在当前tomcat实例上的所有的webapp提供默认配置;
启动
tomcat启动脚本是启动Bootstrap类,Bootstrap是tomcat的门面,用于隐藏tomcat的内部类Catalina。
1)org.apache.catalina.startup.Bootstrap:main程序,启动脚本调用的类方法,负责创建Catalina实例 ;
2)org.apache.catalina.startup.Catalina :启动/关闭Server,并负责解析tomcat配置文件server.xml;
3)Bootstrap常用参数:
- catalina.home:tomcat安装目录,tomcat实例公用安装目录下的bin, lib目录
- catalina.base:tomcat实例目录,包括conf, logs, temp, webapps, work目录
- java.endorsed.dirs:包升级替换机制,该目录下的类会覆盖jdk里原有的类
- wtp.deploy:tomcat部署目录(暴露了还在用eclipse)
4)org.apache.catalina.startup.Tomcat:用于内嵌或单元测试的最小启动器
部署方式
1)描述符:Host容器配置目录下的Context标签的XML文件,位置在webapps目录下或conf/Catalina/localhost目录下;
2)WAR文件:Host容器appBase目录的war,默认是webapps目录;
3)目录部署:Host容器appBase目录的目录,默认是webapps目录;
4)server.xml配置文件:启动时解析server.xml配置文件创建context;
/**
* Deploy applications for any directories or WAR files that are found
* in our "application root" directory.
*/
protected void deployApps() {
File appBase = host.getAppBaseFile();
File configBase = host.getConfigBaseFile();
String[] filteredAppPaths = filterAppPaths(appBase.list());
// Deploy XML descriptors from configBase
deployDescriptors(configBase, configBase.list());
// Deploy WARs
deployWARs(appBase, filteredAppPaths);
// Deploy expanded folders
deployDirectories(appBase, filteredAppPaths);
}