Tomcat 核心组件及配置文件解读
Java 2 EE 计数体系包含如 Serverlet , JSP , JMX 等等。
以OpenJDK为例,当前比较常用的有1.6.0、1.7.0、1.8.0等版本,当一台主机上有多个OpenJDK时,可使用 "alternatives" 命令设定默认使用的版本。
Java代码的运行:*.java(source code) --> javac --> *.class(bytecode)
JSP :Java Server Page> JSP Container : JSP + Servlet Container
基于jasper将静态输出的数据转为java代码进行输出,结果为servlet规范的代码
.jsp -->jasper--> .java --> javac --> .class --> jvm
tomcat 是JSP Container的开源实现,tomcat是 Java 2 EE 技术体系的不完整实现,tomcat在使用前需要部署Java环境。
JSP Container 技术的商业实现包括:WebSphere, WebLogic, Oc4j, Glassfish, Geronimo, JOnAS, JBoss等等
JSP Container 技术的开源实现包括:Tomcat, Jetty, Resin
Tomcat默认配置文件及结构框架:
html语言嵌入式风格
tomcat的配置文件:
server.xml:主配置文件
web.xml:每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认配置
context.xml:每个web都可以专用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认配置
tomcat-users.xml:用户认证的账号和密码文件
tomcat的主配置文件及各组件的框架结构详解
tomcat主配置文件的默认配置实例:
组件详解:每个组件都由一个Java“类”实现,这些组件大体可分为以下几个类型:
顶级组件:Server
一个Server可包含多个Service代表tomcat instance,即表现出的一个java进程;监听在8005端口,只接收“SHUTDOWN”。
各server监听的端口不能相同,因此,在同一物理主机启动多个实例时,需要修改其监听端口为不同的端口
服务类组件:Service
一个Service中仅能有一个Engine
一个Engine可对应多个Connector,但一个Connector仅能对应一个Engine用于实现将一个或多个connector组件关联至一个engine组件
连接器组件:http, https, ajp
负责接收请求,常见的有三类http/https/ajp;
进入tomcat的请求可分为两类:
1. standalone : 请求来自于客户端浏览器;
2. 由其它的web server反代:来自前端的反代服务器;
nginx --> http connector --> tomcat
httpd(proxy_http_module) --> http connector --> tomcat
httpd(proxy_ajp_module) --> ajp connector --> tomcat
Connector属性
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
address:监听的IP地址;默认为本机所有可用地址
maxThreads:最大并发连接数,默认为200
enableLookups:是否启用DNS查询功能
acceptCount:等待队列的最大长度
容器类:Engine, Host, Context
一个Engine中可包含多个Host,一个Host中可包含多个Context
Engine组件:Servlet实例,即servlet引擎,其内部可以一个或多个host组件来定义站点,通常需要通过defaultHost来定义默认的虚拟主机
Engine属性
name=" "
defaultHost="localhost"
jvmRoute=" "
Host组件:位于engine内部用于接收请求并进行相应处理的主机或虚拟主机
Host属性
1. appBase:此Host的webapps的默认存放目录(/var/lib/tomcat/webapps),指存放非归档的web应用程序的目录或归档的WAR文件目录路径;可以使用基于$CATALINA_BASE变量所定义的路径的相对路径
2. autoDeploy:在Tomcat处于运行状态时,将某webapp放置于appBase所定义的目录中时,是否自动将其部署至tomcat。