Tomcat是Apache开源软件组织的一个软件项目,它本身完全用Java语言编写,它是一个优秀的Servlet容器.
1.基本功能
Tomcat作为运行Servlet的容器,其基本功能是负责接收和解析来自客户的请求,同时把客户的请求传送给相应的Servlet,并把Servlet的响应结果返回给客户.
2.组成结构
该结构主要是/conf/server.xml中的结构,用于配置Tomcat.
在该Xml代码中,每个元素都代表一种Tomcat组件,这些元素可分为4类:
- 顶层类元素:< Server>和< Service>
- 连接器类元素:< Connector>,代表介于客户与服务器之间的通信接口.
- 容器类元素:< Engine>,< Host>,< Context>,< Cluster>.
- 嵌套类元素:< Valve>,< Realm>
首先看一个创建好了的server.xml文档:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 启动Server 在端口8005处等待关闭命令 如果接受到"SHUTDOWN"字符串则关闭服务器 -->
<Server port="8005" shutdown="SHUTDOWN">
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
<GlobalNamingResources>
<Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
</GlobalNamingResources>
<!-- 服务Service -->
<Service name="Catalina">
<!-- Http连接器,监听8080端口,负责建立Http连接 -->
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector SSLEnabled="true" clientAuth="false" keystoreFile="conf/.keystore" keystorePass="123456" maxThreads="150" port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true" sslProtocol="TLS"/>
<!-- AJP连接器,监听8009端口,负责和其他的Http服务器建立连接 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
<!-- 自带名为Catalina的Engine组件,它的默认虚拟主机为localhost -->
<Engine defaultHost="localhost" name="Catalina">
<!-- 定义的安全域,所有的虚拟主机都共享这个Realm -->
<Realm className="org.apache.catalina.realm.LockOutRealm" />
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<!-- 名字为localhost的虚拟主机 -->
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<!-- 访问日志阀,能够将客户的请求信息写到日志文件中 -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt"/>
<!-- 一个web项目,它的目录为appBase + docBase = webapps/ServletFramework -->
<Context docBase="ServletFramework" path="/ServletFramework" reloadable="true" source="org.eclipse.jst.jee.server:ServletFramework"/></Host>
<p align="left"/>
</Engine>
</Service>
</Server>
3.工作模式
3.1 独立的Servlet容器
Tomcat作为独立的Web服务器来单独运行,Servlet容器组件作为Web服务器的一部分而存在,这是Tomcat的默认工作模式.在这种模式下,Tomcat需要启动一个Java虚拟机.
3.2 其他Web服务器进程内的Servlet容器
这种模式下,Tomcat分为Web服务器插件和Servlet容器组件两部分.如果客户端发送调用Servlet的请求,web服务器插件获取请求的控制并将它转发给Servlet容器组件.
3.3 其他Web服务器进程外的Servlet容器
这种模式下,Tomcat分为Web服务器插件和Servlet容器组件两部分.Web服务器插件在其他web服务器外部地址空间启动一个Java虚拟机进程,Servlet容器组将再次Java虚拟机上运行。