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服务器接受客户请求并做出响应的图例:

①客户端(通常都是浏览器)。访问Web服务器,发送HTT请求。
② web服务器接收到请求后,传递给Servlet容器。
③Servlet容器加载Servlet,产生Servlet实例后,向其传递请求和响应的对象。
④Servlet实例使用请求对象得到客户端的请求信息,然后进行相应的处理。
⑤Servlet实例将处理结果通过响应对象发送回客户端,容器负责确保响应正确送出,同时将控制返回给web服务器。

目录结构

Tomcat安装后的目录层次结构如下图:

各目录用途如下表所示:

目录 用途
/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文件中进行设置。

注意以粗体显示的这句话的作用就是设置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各组件之间的层次关系如下图所示。

下面简单介绍一下各组件在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服务器中各组件的工作流程:

在Tomcat中,提供了各组件的接口及其实现类,如果你要替代Tomcat中的某个组件,只需要根据该组件的接口或类的说明,重写该组件,并进行配置即可。下图是Tomcat各组件的类图:

上面类图的接口名或类名下面是该接口或该类所在的包,这些接口和类都在%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-users>元素中添加如下内容:

<user username="admin " password=“12345678” roles=“admin-gui”/>

其中用户名和密码可以根据自己的喜好设置。启动Tomcat服务器,打开浏览器,在地址栏中输入: http://localhost:8080/host-manager 也可以在Tomcat默认主页面的右上角点击Host Manager按钮访问。输入用户名密码后将出现如下页面:

在这个页面中,可以进行Tomcat服务器的各项配置。

manage Web 应用程序

manager Web应用程序和host-manager程序一样,需要添加访问manager Web应用程序的管理员账号,编辑%CATALINA_HOME%conf\tomcat-users.xml文件,在<ctomcat-users>元素中添加如下内容<user username=“manager” password="12345678"roles=“manager-gui”/>其中用户名和密码可以根据自己的喜好设置。启动 Tomcat服务器,打开浏览器,在地址栏中输入 http://ocalhost:8080/manager 也可以在Tomcat默认主页面的右上角点击Manager App按钮访问。输入正确的用户名密码后将出现如下图所示的页面:

在这个页面中,你可以部署、启动、停止、重新加载、卸载Web应用程序。注意“/examples”项目,单击这个路径将看到Tomcat提供的JSP和Servlet的例子程序,这些程序可以作为学习JSP和Servlet的参考。


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

Tomcat7.0浅析相关推荐

  1. Tomcat7.0源码分析——Session管理分析(下)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/beliefer/article/details/52451061 前言 在<Tomcat7.0 ...

  2. Tomcat7.0源码分析——Session管理分析(上)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/beliefer/article/details/52450268 前言 对于广大java开发者而言, ...

  3. Tomcat7.0.26的连接数控制bug的问题排查

    参考:http://ifeve.com/tomcat7-0-26-connect-bug/ 首先感谢@烈元一起排查此问题.今天发现线上一台机器,监控一直在告警,一看是健康检查不通过,就上去查看了下,首 ...

  4. Ubuntu下利用JDK的Keytool配置Tomcat7.0的SSL协议

    Ubuntu下利用JDK的Keytool配置Tomcat7.0的SSL协议: 1.用JDK自带的Keytool生成服务器证书:   1)打开终端控制台,转向tomcat主目录,执行生成keystore ...

  5. Ubuntu 10.10配置JRE、JDK、Eclipse和Tomcat7.0.5

    1.安装JDK 1.1.到官网下载相关的JDK,这里下载的是 jdk-6u23-linux-i586.bin. 网站:http://www.oracle.com/technetwork/java/ja ...

  6. tomcat7.0.42如何设置mysql数据库连接池

    转载自   tomcat7.0.42如何设置mysql数据库连接池 如何在tomcat7.0.42中设置mysql数据库连接池????eclipse如何绑定tomcat??按网上教程总不成功!怎么办 ...

  7. linux隐藏tomcat版本_Ubuntu 14.04隐藏Tomcat-7.0.52的版本号与操作系统类型

    一般情况下,软件的漏洞信息和特定版本,特定操作系统是相关的,因此,软件的版本号以及操作系统类型对攻击者来说是很有价值的. 在默认情况下,Tomcat会在返回信息中把自身的版本号,操作系统类型都显示出来 ...

  8. jsp学习之路之安装Apache Tomcat7.0服务器

    1.首先,jsp就是Java Server Pages,是基于Java语言的一种web应用开发技术,可以建立安全.跨平台的先进动态网页,利用jsp技术创建的web应用程序可以实现动态页面和静态页面的分 ...

  9. eclipse无法创建tomcat7.0的server

    版权声明:转载请注明作者及出处,否则将追究法律责任. https://blog.csdn.net/q2158798/article/details/83958444 学习记录:BUG记录 eclips ...

最新文章

  1. Atitit 实现java的linq 以及与stream api的比较
  2. 独轮车(广搜_队列)
  3. [JNI]开发之旅 (3)jni域描述符说明
  4. 树莓派安装qq linux,2019年树莓派运行新版原生LinuxQQ?【已更新】
  5. Python入门最完整的基础知识大全【纯干货,建议收藏】
  6. pano2VR创建沙盘雷达设置以中心点旋转
  7. Delphi程序实现多语言功能
  8. Unity手游实战:从0开始SLG——本地化篇(一)聊聊游戏本地化
  9. JAVA学习48_Eclipse错误: 找不到或无法加载主类或项目无法编译10种解决大法!
  10. GAMIT安装报错:Type mismatch / Rank mismatch
  11. R语言logistic回归的细节解读
  12. android usb鼠标,用鼠标键盘控制你的Android手机完整图文教程
  13. 北京联合大学计算机科学与技术分数线,北京联合大学录取分数线2021是多少分(附历年录取分数线)...
  14. JAVA实现2048小游戏
  15. 算法总结 — 并查集
  16. es 安装以及api
  17. IceSSL插件配置
  18. 当你无心学习,试一试跑步和听音乐
  19. Axure this is most likely not a valida .rp file
  20. 乌克兰国防系统账号:admin,密码:123456

热门文章

  1. php错误1064,求助,phpmyadmin导入sql文件提示1064错误
  2. BatchNormalization、LayerNormalization、InstanceNorm、GroupNorm、SwitchableNorm总结
  3. node 版本管理工具 nvm,node版本升级、降级
  4. Inverse Fourier transform
  5. 蓝桥杯-【交换瓶子】【2016年省赛B组题解】【C++】
  6. 计算机培训动员会演讲稿,计算机协会社长就职演讲稿与计算机培训心得体会合集.doc...
  7. 使用Mindstudio进行Pytorch模型量化压缩
  8. 中关村发布:大数据企业分布图等3张图
  9. 马斯克与SEC再次达成和解 发布特斯拉财务等推特需要得到律师批准
  10. 醋泡花生米降血压特效偏方