一、Java Web
在实际Java Web开发领域中,为了能让Web服务器与Web应用这两个不同的软件系统协作,首先应该由一个中介方制定Web应用与web服务器进行协作的标准接口,Servlet就是其中最主要的一个接口。中介方规定:
1)web服务器可以访问任意一个Web应用中实现Servlet接口的类。
2)Web应用中用于被Web服务器动态调用的程序代码位于Servlet接口的实现类中。
在java中由语言的创始者SUN公司来制定以上标准接口,这一系列标准的Java接口(java Servlet API)称为Servlet规范。所以Tomcat与JavaWeb应用的关系如下图:
二、Tomcat作为Servlet容器的基本功能
Servlet,顾名思义,是一种运行在服务器上的小插件。Servlet最常见的用途是扩展Web服务器的功能,它可作为非常安全的、可移植的、易于使用的CGI替代品。
servlet具有以下特点:
1)提供了可被服务器动态加载并执行的程序代码,为来自客户的请求提供相应服务。
2)Servlet完全用Java语言编写,因此要求运行Servlet的服务器必须支持Java语言。
3)Servlet完全在服务器端运行,因此它的运行不依赖浏览器。不管浏览器是否支持Java语言,都能请求访问服务器端的Servlet。
相应的具体流程:
(1)客户发出要求访问特定Servlet的请求
(2)Servlet容器接收到客户的请求,对其解析
(3)Servlet容器创建一个ServletRequest对象,在ServetRequset对象中包含了客户请求信息及其他关于客户的信息,如请求头、请求正文,以及客户机的IP地址等。
(4)Servlet容器创建一个ServletResponse对象。
(5)Servlet容器调用客户所请求的Servlet的service()服务方法,并且把ServletRequest对象和ServletResponse对象作为参数传给该服务方法。
(6)Servlet从ServletRequest对象中可获取客户的请求信息。
(7)Servlet利用ServletResponse对象来生成响应结果。
(8)Servlet容器把Servlet生成的响应结果发给客户
三、Tomcat的组成结构
Tomcat的各个组件在<CATALINA_HOME>/conf/server.xml文件中进行配置,每个Tomcat组件在servler.xml文件中对应一种配置元素。
组件可分为四类:
顶层类元素:包括Server元素和Service元素
连接器类元素:为connector元素代表介于客户与服务器之间的通信接口,负责服务器和客户之间的请求和响应
容器类元素:代表处理客户请求并生成响应结果的组件,有4种容器类元素,分别为engine,host,context,cluster
engine为特定的service处理所有客户请求,host组件为特定的虚拟主机处理所有客户请求,context为特定的web应 用处理所有的客户请求,cluster组件负责为tomcat集群系统进行会话复制context组件属性的复制,以及集群范围内 WAR文件的发布。嵌套类元素:代表可以嵌入到容器内的组件,如<Value>和<Realm>元素
<Server>//代表整个Servlet容器组件,是Tomcat的顶层元素一个server可包含多个service
<Service>//包含一个engine,以及一个或多个connector,这些connector共享一个engine
<Connnector />//代表和客程序实际交互的组件,负责接收客户请求,以及向客户返回响应结果
<Engine>每个sevice包含一个engine,engine处理同一个service中所有connector接收的客户请求
<Host>每个engine包含多个host,每个host定义一个虚拟主机,它可以包含一个或多个web应用
<Context>//使用最频繁的元素。每个context代表运行在虚拟主机上的单个web应用。
//一个host可以包含多个context元素
</Context>
</Host>
</Engine>
</Service>
</Server>
四、Tomcat的工作模式
Tomcat作为Servlet容器,有以下三种工作模式
(1)独立的Servlet容器
在这种模式下,Tomcat是一个独立运行的Java程序。和运行其他Java程序一样,运行Tomcat需要启动一个Java虚拟机(JVM)进程
(2)其他Web服务器进程内的Servlet容器
在这种模式下,Tomcat分为Web服务器插件和Servlet容器组件两部分。web服务器插件在其他Web服务器进程的内部地址空间启动一个Java虚拟机,Servlet容器组件在此虚拟机中运行。web组件和容器组件通过JNI(java本地调用接口)通信。
(3)其他Web服务器进程外的Servlet容器
在这种模式下,Tomcat分为web服务器插件和Servlet容器组件,web服务器插件在其他web服务器的外部地址空间启动一个Java虚拟机进程,servlet在此虚拟机中运行,web服务器插件和servlet容器组件通过IPC(进程间通信机制)通信