深入浅出了解Tomcat底层原理

开始了解Tomcat

首先要了解Servlet,它是J2EE标准的一部分,是Java Web开发的标准,标准比协议多了强制性的意义,不过作用基本一样,都是用来制定统一的规范,标准自己是不能干活的,要想使用Servlet需要相应的Servlet容器,比如Tomcat

Tomcat的定位

Tomcat是web服务器和轻量级的应用服务器。web服务器主要是处理静态页面和作为servlet容器,解释和执行servlet/JSP。而应用服务器是运行业务逻辑的,主要是EJB、JNDI等J2EE API方面的,还包括事务处理,数据库连接等功能。但是Tomcat不提供大多数的J2EE API支持。它的资源需求比较少,他可以压缩为小于10M的文件,所以是轻量级。

Tomcat的结构

Tomcat的整体结构
Tomcat顶层容器是Server,代表整个服务器,Server中包含至少一个Service,用于提供具体的服务。Service主要包括两部分:Connector和Container。
Connector用于处理连接相关的事情,并提供Socket与request,response的转换,Container用于封装和管理Servlet,以具体处理request请求。一个Tomcat只有一个Server,一个Server可以包含多个Service,一个Service只有一个Container,但可以有多个Connectors,因为一个服务可以有多个连接,如同时提供http和https连接,也可以提供相同协议不同端口的连接。

Tomcat的启动和生命周期

Tomcat里的Server由org.apache.catalina.startup.Catalina来管理,Catalina是整个Tomcat的管理类,它里面有三个方法,load,start,stop
分别用来管理整个服务器的生命周期,load方法用于根据conf/server.xml文件创建Server并调用Server的init方法进行初始化,start方法用于启动服务器,stop方法用于停止服务器,int,start和stop方法在内部分别调用了Server的init,stop和start方法,这三个方法都会按容器的结构逐层调用响应的方法,比如,Server的start方法中会调用Service中的start方法,Service中的start方法又会调用所有包含的Connectors和Container的start方法,这样整个服务器就启动了,init和stop方法也一样,这就是Tomcat生命周期的管理方式。Catalina还有个方法很重要,await方法,会直接调用Server的await方法,它的作用是进入一个循环,让主线程不会退出。
不过Tomcat的入口main方法不在Catalina类里,而是在org.apache.catalina.startup.Bootstrap中,它的作用类似一个CatalinaAdaptor,具体处理过程还是使用Catalina来完成,这么做的好处是可以把启动的入口和具体的管理类分开,从而可以很方便的创建出多种启动方式。每种启动方式只需要写一个相应的CatalinaAdaptor。

配置Tomcat需要了解的Container子容器

Container的结构

前面讲过Connector和Container是Service的两部分。它还有四个子容器Engine,Host,Context,Wrapper。Engine是最顶层,每个service最多只能有一个Engine,Engine里面可以有多个Host,每个Host下可以有多个Context,每个Context下可以有多个Wrapper。
Engine引擎,用来管理多个站点,Host代表一个站点,也可以叫虚拟主机,通过配置Host可以添加站点。
Context代表一个应用程序,对应着平时开发的一套程序,或者WEB-INF目录以及下面的web.xml,每个Wrapper封装这一个Servlet。
Context和Host的区别是Context表示一个应用,比如默认配置下webapps下的每个目录都是一个应用,ROOT目录存放着主应用,其他目录存放子应用,
而整个webapps是一个站点,加入www.exclib.com域名对应着webapps目录所代表的站点,其中的ROOT目录里的应用就是主应用,访问时直接使用域名就可以,而webapps/test目录存放着的是test子应用,访问时需要用www.exclib.com/test,每一个应用对应一个Context,所有webapps下的应用都属于www.excelib.com站点。

Tomcat配置

Tomcat大部分功能都在conf/server.xml中配置,server.xml是Tomcat最重要的配置文件,下面是默认的简化设置:
server.xml默认配置
这里首先定义了一个Server,在8005端口监听关闭命令"SHUTDOWN";Server里定义了一个名为Catalina的Service;Service里定义了两个Connector,一个是HTTP协议,一个是AJP协议,AJP主要用于集成(如与Apache集成);Service里还定义了一个名为Catalina的Engine;Engine里定义了一个名为localhost的Host。
Host标签中的name属性代表域名,所以上面定义的站点可以通过localhost访问,appBase属性指定站点的位置,比如,上面定义的站点就是默认的webapps目录,unpackWARs属性表示是否自动解压war文件,autoDeploy属性表示是否自动部署,如果autoDeploy为true,那么Tomcat在运行过程中在webapps目录加入新的应用将会自动部署并启动。另外Host还有一个Alias子标签,可以通过这个标签来定义别名,如果有多个域名访问同一个站点就可以这么定义,如www.excelib.com和excelib.com要访问同一个站点,可以做如下配置:
Alias标签定义别名
Engine在定义的时候有个defaultHost属性,它表示默认接收到请求的域名,一般为Host标签定义的域名中的一个。用IP直接访问也会用到defaultHost,如果将Engine的defaultHost属性删除,然后启动用127.0.0.1来访问本机的Tomcat就不可能了。

总结

本节我们了解了Tomcat是用来干嘛的,以及它的运行原理和配置,后续更博我们会详细讲解底层应用,从Tomcat开始我们将把web和网络以及springMvc的陆续讲解。每周一更。文中大部分内容在《看透springMvc源代码分析与实践》都有更详细的讲解,推荐大家阅读,谢谢。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值