{"attachments":[],"attr":{},"bold":false,"channelId":461,"checked":true,"collectsCount":0,"commentsCount":1,"commentsDay":0,"contentCount":{"collects":0,"collectsDay":0,"collectsMonth":0,"collectsWeek":0,"comments":1,"commentsDay":0,"commentsMonth":0,"commentsWeek":0,"downloads":0,"downloadsDay":0,"downloadsMonth":0,"downloadsWeek":0,"downs":0,"id":101485,"likes":0,"likesDay":0,"likesMonth":0,"likesWeek":0,"ups":0,"upsDay":0,"upsMonth":0,"upsWeek":0,"views":1104,"viewsDay":0,"viewsMonth":25,"viewsWeek":4},"contentExt":{"bold":false,"description":"tomcat是一个web容器,可以将web应用部署到tomcat,由它提供web服务,一个web容器中可以部署多个web应用,这些web应用可以是同一个域名,也可以是多个域名的服务。","editDate":1575334281000,"id":101485,"releaseDate":1575334281000,"stitle":"一文读懂Tomcat组件--一个Web服务器的架构演化史","title":"一文读懂Tomcat组件--一个Web服务器的架构演化史","tplMobileContent":"","typeImg":"http://static.pinhuba.com/u/cms/www/201912/03085121caro.jpeg!400.300"},"contentImgWhole":"一文读懂Tomcat组件--一个Web服务器的架构演化史","contentTxt":{"id":101485,"txt":"
1. tomcat是谁?
2. tomcat可以做什么?
tomcat是一个web容器,可以将web应用部署到tomcat,由它提供web服务,一个web容器中可以部署多个web应用,这些web应用可以是同一个域名,也可以是多个域名的服务。
3. tomcat有哪些组件
4.怎么快速理解这些组件呢?
我们可以假设我们来设计一个web容器,我们该什么设计?
第一代:接收请求,处理请求,返回结果集中到整个web容器中,
如下图所示:
第二代 :连接管理和处理逻辑分开
使用过程中发现,每次都要打开socket的连接,调用处理逻辑,然后关闭socket连接比较烦,干脆将socket的连接关闭交给Connector来处理,请求的业务逻辑交给Container来处理好了,就变成这样了。
第三代:支持多种网络协议
最初的目标是设计一个web服务器或者容器,那么如果想要支持更多的协议就需要新建不同的Connector和Container,此时就变成这样子了,其中service包装了Connector和Container
第四代:支持多个web应用
既然是容器,就要支持多个应用,每个应用是有一个Context,且相互隔离,支持多个Context的架构如下:
第五代:支持多域名
Context上下文不仅仅需要物理上的隔离,也需要逻辑上的隔离,如app1.example.com访问context1,app1.test.com访问context2.
此时的架构应该是这样的,host可以支持多个context。
5.总结:
web服务器的组件由server-->满足功能
server+connector+Container-->职责分离
server+service+connector+Container-->支持多种协议
server+service+connector+Container+context-->支持多个应用
server+service+connector+Container+host+context -->支持多个域名的多个应用
其实就是一个分工组件细化的过程,类似于社会分工的细化,注意,Container在tomcat里也称作engine。
","txtCount":1},"ctgName":"JAVA WEB","ctgUrl":"http://www.pinhuba.com/javaweb/index.htm","date":1575334281000,"desc":"tomcat是一个web容器,可以将web应用部署到tomcat,由它提供web服务,一个web容器中可以部署多个web应用,这些web应用可以是同一个域名,也可以是多个域名的服务。","description":"tomcat是一个web容器,可以将web应用部署到tomcat,由它提供web服务,一个web容器中可以部署多个web应用,这些web应用可以是同一个域名,也可以是多个域名的服务。","downloadsDay":0,"downs":0,"draft":false,"hasTitleImg":false,"id":101485,"imgUrl2":"http://static.pinhuba.com/u/cms/www/201912/03085121caro.jpeg!400.300","mobileTplContent":"","modelId":1,"new":false,"pageCount":1,"pictures":[],"recommend":true,"releaseDate":1575334281000,"score":0,"shared":false,"siteId":4,"siteName":"品互网络","siteUrl":"http://www.pinhuba.com","sortDate":1575334282000,"status":2,"stit":"一文读懂Tomcat组件--一个Web服务器的架构演化史","stitle":"一文读懂Tomcat组件--一个Web服务器的架构演化史","tags":[],"tit":"一文读懂Tomcat组件--一个Web服务器的架构演化史","titBold":false,"title":"一文读懂Tomcat组件--一个Web服务器的架构演化史","titleImgWhole":"一文读懂Tomcat组件--一个Web服务器的架构演化史","topLevel":0,"txt":"1. tomcat是谁?
2. tomcat可以做什么?
tomcat是一个web容器,可以将web应用部署到tomcat,由它提供web服务,一个web容器中可以部署多个web应用,这些web应用可以是同一个域名,也可以是多个域名的服务。
3. tomcat有哪些组件
4.怎么快速理解这些组件呢?
我们可以假设我们来设计一个web容器,我们该什么设计?
第一代:接收请求,处理请求,返回结果集中到整个web容器中,
如下图所示:
第二代 :连接管理和处理逻辑分开
使用过程中发现,每次都要打开socket的连接,调用处理逻辑,然后关闭socket连接比较烦,干脆将socket的连接关闭交给Connector来处理,请求的业务逻辑交给Container来处理好了,就变成这样了。
第三代:支持多种网络协议
最初的目标是设计一个web服务器或者容器,那么如果想要支持更多的协议就需要新建不同的Connector和Container,此时就变成这样子了,其中service包装了Connector和Container
第四代:支持多个web应用
既然是容器,就要支持多个应用,每个应用是有一个Context,且相互隔离,支持多个Context的架构如下:
第五代:支持多域名
Context上下文不仅仅需要物理上的隔离,也需要逻辑上的隔离,如app1.example.com访问context1,app1.test.com访问context2.
此时的架构应该是这样的,host可以支持多个context。
5.总结:
web服务器的组件由server-->满足功能
server+connector+Container-->职责分离
server+service+connector+Container-->支持多种协议
server+service+connector+Container+context-->支持多个应用
server+service+connector+Container+host+context -->支持多个域名的多个应用
其实就是一个分工组件细化的过程,类似于社会分工的细化,注意,Container在tomcat里也称作engine。
","txtCount":1,"typeId":2,"typeImg":"http://static.pinhuba.com/u/cms/www/201912/03085121caro.jpeg!400.300","typeImgWhole":"http://www.pinhuba.com:80http://static.pinhuba.com/u/cms/www/201912/03085121caro.jpeg!400.300","ups":0,"upsDay":0,"url":"http://www.pinhuba.com/javaweb/101485.htm","urlDynamic":"http://www.pinhuba.com/javaweb/101485.htm","user":{"activation":true,"admin":true,"birthday":1664208000000,"comefrom":"江苏 宜兴","countAttentions":11,"countContents":572,"countFans":750,"countTopics":38,"disabled":false,"fileTotal":0,"gender":0,"grain":0,"groupId":1,"id":49,"intro":"我是老高,我为自己带盐。","lastLoginIp":"58.215.6.202","lastLoginTime":1711693342000,"lastLoginTimeStr":"2024-03-29 14:22","loginCount":5199,"mobile":"18061563977","msn":"msn","onlineTotal":34764,"onlineTotalHour":"579.40","phone":"87119969","priority":0,"qq":"344359951","rank":0,"realname":"蒋超","registerIp":"122.193.135.82","registerTime":1425364749000,"registerTimeStr":"2015-03-03 14:39","selfAdmin":false,"spaceStyle":"fcqq","spaceUrl":"/u/49.jspx","unifiedUser":{"activation":true,"errorCount":0,"id":49,"mobile":"18061563977","registerIp":"122.193.135.82","registerTime":1425364749000,"username":"老高"},"uploadDate":1697731200000,"uploadSize":1,"uploadTotal":10736,"userExt":{"birthday":1664208000000,"comefrom":"江苏 宜兴","countAttentions":11,"countContents":572,"countFans":750,"countTopics":38,"gender":0,"id":49,"intro":"我是老高,我为自己带盐。","msn":"msn","phone":"87119969","qq":"344359951","realname":"蒋超","spaceStyle":"fcqq","userImg":"http://static.pinhuba.com/uface/3.jpg","userSignature":"专注于JAVA技术...我是老高,我为自己带盐。"},"userImg":"http://static.pinhuba.com/uface/3.jpg","userOnline":{"id":49,"lastLoginIp":"58.215.6.202","lastLoginTime":1711693342000,"lastStopTime":1711693342000,"loginCount":5199,"onlineTotal":34764,"systemHost":"127.0.0.1:8232","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36"},"userSignature":"专注于JAVA技术...我是老高,我为自己带盐。","username":"老高","viewonlyAdmin":false},"userId":49,"viewDay":0,"views":1104,"viewsDay":0,"viewsMonth":25,"viewsWeek":4}