Tomcat7.0浅析

Tomcat7.0浅析

  • 目录结构
  • 启动分析
  • 结构体系
  • 管理程序
    • host-manager Web 应用程序
    • manage Web 应用程序

Tomcat服务器是一个免费的可放源代的Web应用服务器,它是 Apache软件些金会(Apache Software Foundation)的 Jakarta项目中的一个核心项目,由Apache、sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现。因为Tomcat技术先进、性能稳定,而且免费,因向深受Java爱好者的喜爱并得到部分软件开发商的认可,成为目前比数流行的web应用服务器。

Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,令外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式,不过Tomcat处理HTML的能力不如Apache。

下面是Tomcat服务器接受客户请求并做出响应的图例:
Tomcat7.0浅析_第1张图片
①客户端(通常部是浏览器)。访问Web服务器,发送HTT请求。
② web服务器接收到请求后,传递给Servlet容器。
③Servlet容器加载Servlet,产生Servlet实例后,向其传递请求和响应的对象。
④Servlet实例使用请求对象得到客户端的请求信息,然后进行相应的处理。
⑤Servlet实例将处理结果通过响应对象发送回客户端,容器负责确保响应正确送出,同时将控制返回给web服务器。

目录结构

Tomcat安装后的目录层次结构如下图:
Tomcat7.0浅析_第2张图片
各目录用途如下表所示:

目录 用途
/bin 存放Tomcat服务器的启动和关闭Tomcat等脚本
/conf 存放Tomcat服务器各种配置文件,其中包括server.xml(Tomcat的主要配置文件) 、tomcat-users.xml、web.xml等
/lib 存放Tomcat服务器运行所需要的jar包
/logs 存放Tomcat服务器运行过程中产生的日志文件,非常重要的是在控制台输出的日志。(清空不会对tomcat运行带来影响) 在windows环境中,控制台的输出日志在catalina.xxxx-xx-xx.log文件中。在linux环境中,控制台的输出日志在catalina.out文件中
/temp 存放Tomcat服务器运行所产生的临时文件
/webapps 当发布Web应用程序时用,通常把Web应用程序的目录或web包存放到这个项目下面
/work work目录用来存放tomcat在运行时的编译后文件,例如JSP编译后的文件。 清空work目录然后重启tomcat,可以达到清除缓存的作用。

启动分析

我们可以用文本编辑工具打开用于启动Tomcat的批处理文件startup.bat,仔细阅读可以发现,在这个文件中,首先判断CATALINA_HOME 环境变量是否为空,如果为空,就将当前目录设为CATALINA_HOME的值,接着判断当前目录下是否存在bin\catalina.bat,如果文件不存在,将当前目录的父目录设为CATALINA_HOME的值,根据安装机器上Tomcat安装目录的层次结构,最后CATALINA_HOME的值被设为Tomcat的安装目录。如果环境变量CATALINA_HOME已经存在,则通过这个环境变量调用bin目录下的“catalina.bat start”命今。通过这段分析,我们了解到两个信息:

  1. Tomcnt启动时,需要査找CATALINA_HOME这个环境变量,如果在当前目录下调用startup.bat,Tomcat会自动设置CATALINA_HOME。
  2. 二是执行startup.bat命令,实际上执行的是“catalina.bat start”命令。

要在其他目录也能启动Tomcat,就需要设置CATALINA_HOME环境变量,你可以将CATALINA_HOME添加到系统的环境变量中,其值就是Tomcat的安装目录。如果你不想在系统环境变量中添加,也可以直接在startup.bat文件中进行设置。
Tomcat7.0浅析_第3张图片
注意以粗体显示的这句话的作用就是设置CATALINA_HOME环境变量。在它的下面就可以判断CATALINA_HOME是否为空了。如果你找不准位置,干脆将设置CATALINA_HOME环境变量的这句话放置到文件的第一行。JAVA_HOME环境变量也可以采用同样的方式进行设置。不过,如果你要在其他目录下利用shutdown.bat来关闭Tomcat服务器,你也需要在shutdown.bat文件中设置CATALINA_HOME和JAVA_HOME这两个环境变量,设置变量的位置和startup.bat文件一样,都是在判断CATALINA_HOME是否为空之前。当然,为了一劳永逸,避免重装Tomcat后还要进行设置(需要是同一版本的 Tomcat安装在同一位置),我们最好还是将 CATALINA_HOME和JAVA_HOME这两个环境变量添加到系统的环境变量中。

在Windows系统下环境变量的名字是与大小写无关的,也就是说JAVA_HOME和java_home是相同的。

我们可能会对设置Tomcat安装目录的环境变量的名字是CATALINA_HOME而感到奇怪,按照以前设置的环境变量来看,JAVA_HOME表示JDK的安装目录,那么应该用TOMCAT_HOME来表示Tomcat的安装目录,可为什么要使用CATALINA_HOME呢?实际上,在Tomcat4以前,用的就是TOMCAT_HOME来表示Tomcat的安装目录,在Tomcat4以后,采用了新的Servlet3容器Catalina所以环境变量的名字也改为了CATALINA_HOME。

了解了startup.bat文件以后,我们再来看看真正负责启动Tomcat服务器的catalina.bat文件。通过分析catalina.bat文件,我们发现它还调用了一个文件setclasspath.bat在setclasspath.bat文件中,它检查JAVA_HOME环境变量是否存在,并通过设置的环境变量JAVA_HOME,找到java.exe用于启动Tomcat。在这个文件中,还设置了其他的一些变量,分别表示JDK中的一些工具,有兴趣可以自行分析一下这个文件。在执行完setclasspath.bat之后,catalina.bat剩下的部分就开始了Tomcat服务器的启动进程。直接执行 catalina.bat时,需要带上命令行的参数。

其中常用的参数是star、run和stop,参数start表示在一个单独的窗口中启动Tomcat服务器,参数run表示在当前窗口中启动Tomcat服务器,参数stop表示关闭Tomcat服务器。我们执行startup.bat实际上执行的就是“catalina.bat start”命令;执行shutdown.bat实际上执行的是“catalina.bat stop”命令。“ catalina.bat run”命令有时候是非常有用的,特别是当我们需要查看Tomcat的出错信息时。我们在开发JSP程序时,经常会碰到自己机器上的8080端口号被别的应用程序占用,或者在配置server.xml时出现错误,当通过startup.bat(相当于执行“ catalina.bat start’”)启动Tomcat服务器时,会导致启动失败,因为是在单独的窗口中启动Tomcat服务器,所以一旦启动失败,命令提示符窗口就自动关闭了,程序运行中输出的出错信息也随之消失,而且没有任何的日志信息,这就使得我们没有力法找出错误原因。当出现错误时,我们可以换成“catalina.bat run”命令再次启动,一旦失败,仅仅是Tomcat服务器异常终止,但是在当前的命令提示符窗口下仍然保留了启动时的出错信息,这样我们就可以查找启动失败的原因了。

结构体系

Tomcat服务器是由一系列可配置的组件构成的,其中核心组件是Catalina Servlet容器,它是所有其他Tomcat组件的顶层容器。Tomcat各组件之间的层次关系如下图所示。
Tomcat7.0浅析_第4张图片
下面简单介绍一下各组件在Tomcat服务器中的作用
Server
Server表示整个的Catalina Servlet容器。 Tomcat提供了 Server接口的一个默认实现,这通常不需要用户自己去实现。在 Server容器中,可以包含一个或多个 Service组件
Service
Service是存活在Server中的内部组件,它将一个或多个连接器(Connector)组件绑定到一个单独的引擎(Engine)上。在 Server中,可以包含一个或多个Service组件。Service也很少由用户定制,Tomcat提供了Service接口的默认实现,而这种实现既简单又能满足应用。
Connector
连接器( Connector)处理与客户端的通信,它负责接收客户请求,以及向客户返回响应结果。在Tomcat中,有多个连接器可以使用。
Engine
在 Tomcat中,每个Service只能包含一个Servlet引擎( Engine)。引擎表示一个特定的 Service的请求处理流水线。作为一个Service可以有多个连接器,引擎从连接器接收和处理所有的请求,将响应返回给适合的连接器,通过连接器传输给用户。用户可以通过实现Engine接口提供自定义的引擎,但通常不需要这么做。
HostHost表示一个虚拟主机,一个引擎可以包含多个Host。用户通常不需要创建自定义的Host,因为Tomcat给出的Host接口的实现(类 Standardhost)提供了重要的附加功能。
Context
一个Context表示了一个Web应用程序,运行在特定的虚拟主机中。什么是Web应用程序呢?在Sun公司发布的Java Servlet规范中,对Web应用程序做出了如下的定义:“一个Web应用程序是由一组Servlet、HTML页面、类以及其他的资源组成的运行在Web服务器上的完整的应用程序。它可以在多个供应商提供的实现了Servlet规范的Web容器中运行”。一个Host可以包含多个Context(代表Wcb应用程序),每一个Context都有一个惟一的路径。用户通常不需要创建自定义的Context,因为Tomcat给出的Context接口的实现(类Standardcontext)提供了重要的附加功能。通过下图我们能更好地理解Tomcat服务器中各组件的工作流程:
Tomcat7.0浅析_第5张图片
在Tomcat中,提供了各组件的接口及其实现类,如果你要替代Tomcat中的某个组件,只需要根据该组件的接口或类的说明,重写该组件,并进行配置即可。下图是Tomcat各组件的类图:
Tomcat7.0浅析_第6张图片
上面类图的接口名或类名下面是该接口或该类所在的包,这些接口和类都在%CATALINA_HOME%server\lib\catalina.jar文件中。对Tomcat服务器的实现如果感兴趣可以从http://tomcat.apache.org/上下载Tomcat的源代码。

由于Apache软件基金会并不是一个商业性的组织,所以文档更新的速度有时候跟不上版本更新的速度。当我们在看Tomcat的文档时,最好结合其API文档一起看,这样才能保证了解的信息是完整和准确的。

管理程序

Tomcat提供了两个管理程序:admin和manager。其中admin用于管理和配置Tomcat服务器manager用于管理部署到Tomcat服务器中的Web应用程序。

host-manager Web 应用程序

要访问 host-manager应用程序,需要添加具有管理员权限的账号,编辑%CATALINA_HOME%conf\tomcat-users.xml文件,在元素中添加如下内容:

其中用户名和密码可以根据自己的喜好设置。启动Tomcat服务器,打开浏览器,在地址栏中输入: http://localhost:8080/host-manager 也可以在Tomcat默认主页面的右上角点击Host Manager按钮访问。输入用户名密码后将出现如下页面:
Tomcat7.0浅析_第7张图片
在这个页面中,可以进行Tomcat服务器的各项配置。

manage Web 应用程序

manager Web应用程序和host-manager程序一样,需要添加访问manager Web应用程序的管理员账号,编辑%CATALINA_HOME%conf\tomcat-users.xml文件,在元素中添加如下内容其中用户名和密码可以根据自己的喜好设置。启动 Tomcat服务器,打开浏览器,在地址栏中输入 http://ocalhost:8080/manager 也可以在Tomcat默认主页面的右上角点击Manager App按钮访问。输入正确的用户名密码后将出现如下图所示的页面:
Tomcat7.0浅析_第8张图片
在这个页面中,你可以部署、启动、停止、重新加载、卸载Web应用程序。注意“/examples”项目,单击这个路径将看到Tomcat提供的JSP和Servlet的例子程序,这些程序可以作为学习JSP和Servlet的参考。


  1. 本文来源(Java Web开发详解【孙鑫版】)

你可能感兴趣的:(Tomcat7.0)