了解Tomcat的工作原理和配置文件

参考资料:

[1]Tomcat介绍tomcat

[2]Tomcat源码分析--AccessLogValue

 https://www.cnblogs.com/benwu/articles/9535737.html

[3]Tomcat的阀

Tomcat阀基本原理与工作流程-CSDN博客

[4]log的pattern参数

https://www.cnblogs.com/yangxia-test/p/4444294.html

[5]tomcat之web.xml详解

Tomcat简介:

Tomcat只实现了JAVAEE的两个标准servlet和jsp,核心功能是servlet,所以可以视为一个servlet容器。

Tomcat在大的框架上可以理解为一个Coyote连接器和servlet容器(名为Catalina)。连接器负责把外界的request转化为servletrequest发给容器,并接收servletresponse转化为response发给客户。Servlet容器负责处理请求。

图1 Tomcat的大致框架

认识核心部件catalina:

Catalina:解析配置文件,创建服务器Server

Server:组装Servleet引擎,连接器,通过lifecycle接口对service的生命周期进行管理。

Service:一个Server包含若干service。一个service将多个Connector绑定到Engine上。

Connector:连接器

Engine:总的servlet容器。

Engine具有子类Host,Host代表虚拟主机。

Host具有Context子类,Context代表Web应用

Context具有Wrapper子类,代表一个servlet,在网站上具体代表一个页面。

Tomcat的启动流程:

1) 启动tomcat , 需要调用 bin/startup.bat (在linux 目录下 , 需要调用 bin/startup.sh) , 在startup.bat 脚本中, 调用了catalina.bat。

2) 在catalina.bat 脚本文件中,调用了BootStrap 中的main方法。

3)在BootStrap 的main 方法中调用了 init 方法 , 来创建Catalina 及 初始化类加载器。

4)在BootStrap 的main 方法中调用了 load 方法 , 在其中又调用了Catalina的load方法。此时会激活Catalina,Catalina初始化server,然后Server使用lifecycle接口启动一系列的Service

5)BootStrap 调用start方法,同时调用Catalina的start方法,启动Server,Service根据lifecycle接口启动Service。

Tomcat的启动过程非常标准化, 统一按照生 命周期管理接口Lifecycle的定义进行启动。首先调用init() 方法进行组件的逐级初始化操 作,然后再调用start()方法进行启动。

工作过程:

图2 Tomcat的详细工作流程

举例: http://www.itcast.cn/bbs/findAll

Connector接收到这个请求后,封装后发送给Engine,Engine截取www.itcast.cn找到目标host,把剩下的部分给Host,Host截取/bbs找到目标Context,把剩下部分给Context,Context寻找findALL的wrapper。

由于目前没有学JAVA,对网页应用的编写无从下手,此部分跳过。

网页配置:

图3 Tomcat的目录

tomcat

|---bin Tomcat:存放启动和关闭tomcat脚本;

|---conf Tomcat:存放不同的配置文件(server.xml和web.xml);

|---doc:存放Tomcat文档;

|---lib/japser/common:存放Tomcat运行需要的库文件(JARS);

|---logs:存放Tomcat执行时的LOG文件;

|---src:存放Tomcat的源代码;

|---webapps:Tomcat的主要Web发布目录(包括应用程序示例);

|---work:存放jsp编译后产生的class文件;

                        

Conf文件夹下,配置server.xml配置服务器,web.xml配置网页应用。

先进入server.xml。查看serverl.xml的文件架构。

可以看到server类:

图4 默认监听器设置

运行在8005端口,并且有若干监听器。

图5 默认全局变量

然后是和service类并列的全局变量类。

图6 定义了Catalina service

定义了子类service---Catalina。

在Catalina中,定义了子类连接器。

图7 默认Connector配置

在连接器中,定义了子类Engine:

图8 Engine定义

在engine中,有一个与Host并列的类Realm:

图9 Engine中的全局变量

这个是Engine中的全局变量,更改他会更改所有Host的配置。同理,也可以在Host中配置Realm,会更改所有的Context。

图10 默认的Host定义

这是我在默认server.xml下看到的最基础的类。

1) name: 当前Host通用的网络名称, 必须与DNS服务器上的注册信息一致。 Engine中 包含的Host必须存在一个名称与Engine的defaultHost设置一致。

2) appBase: 当前Host的应用基础目录, 当前Host上部署的Web应用均在该目录下 (可以是绝对目录,相对路径)。默认为webapps。

3) unpackWARs: 设置为true, Host在启动时会将appBase目录下war包解压为目 录。设置为false, Host将直接从war文件启动。

4) autoDeploy: 控制tomcat是否在运行时定期检测并自动部署新增或变更的web应 用。

Value是Host的处理器元素,定义了一系列处理器。先解析这个配置文件中的默认处理器。Classname表示调用的处理器,这里调用的AccessLogValue,是一个日志处理函数。后面的信息是它的参数。Directory是它的存储目录,prefix为前缀,suffix为后缀。

如果想配置一个Host,可以这样:

图11 Host的配置举例

现在,我们把目光转向刚发现的Value。

    通常情况下,当一个用户请求HTTP连接时,会依次从Engine传递到Host,再传递到Context,然后依次返回响应。当为这些组件添加了Value组件以后,在经过每一个组件时,都会经过各自Value的处理。

图12 Values中包含的Value方法

Value实现类共有以下几种:

   信息记录:AccessLogValue,ExtendedAccessLogValue,FastCommonAccessLogValue, JDBCAccessLogValue,ErrorReportValue,                 RequestDumperValue;
   访问控制: RemoteAddrValue,RemoteHostValue,SingleSignOn;
   管理控制: PersistentValue

查不到更多的关于Value的信息了。现在看一下如何配置Web应用:

图13 Web.xml中的版本申明

这里是servlet版本申明。

图14 默认会话设置

这时默认的会话设置,只设置了会话超时时间。实际上这里可以设置Cookie,会话追踪模式。

图15 一个会话设置举例

图16 会话设置中的参数

翻过一长串的mapping,看到了欢迎文件。这位我们提供了Web配置的示例:

图17 默认欢迎文件

真正配置应用的web.xml在/webapps/manager/WEB-INF/web.xml下。

图18 默认的一个servlet容器

可以看到格式,定义了名称,类,初始化设置。

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值