首页 Tomcat源码分析

Tomcat源码分析

举报
开通vip

Tomcat源码分析nullTomcat源码分析Tomcat源码分析如何构建一个web应用服务器Tomcat源码分析Tomcat整体架构1创建一个简单的Http Server2核心组件介绍:Connector , Container3其它组件介绍:Lifecycle etc4Tomcat用到的设计模式5Tomcat源码分析Tomcat整体架构Tomcat整体架构Tomcat源码分析Tomcat整体架构1创建一个简单的Http Server2核心组件介绍:Connector , Container3其它组件介绍:Lifecycle et...

Tomcat源码分析
nullTomcat源码 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 Tomcat源码分析如何构建一个web应用服务器Tomcat源码分析Tomcat整体架构1创建一个简单的Http Server2核心组件介绍:Connector , Container3其它组件介绍:Lifecycle etc4Tomcat用到的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 模式5Tomcat源码分析Tomcat整体架构Tomcat整体架构Tomcat源码分析Tomcat整体架构1创建一个简单的Http Server2核心组件介绍:Connector , Container3其它组件介绍:Lifecycle etc4Tomcat用到的设计模式5Tomcat源码分析A Simple Http ServerA Simple Http Server 问题:通过浏览器请求一个html文件 输入:http://127.0.0.1:8080/A.html A Simple Http ServerA Simple Http ServerA Simple Http ServerA Simple Http Server过程: HttpServer:创建一个ServerSocket用来监听http的请求。 Request:将请求封装为Request对象,Request对象对http请求进行解析,提供getUrl方法来获取客户请求的文件名称(A.html) Response:根据request中的文件路径去本地目录下读取A.html,将文件内容返回给请求的浏览器。 Http Reqeust 报文Http Reqeust 报文GET /servlet/SHost: 127.0.0.1:8080 Connection: keep-alive Cache-Control: max-age=0 User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding: gzip,deflate,sdch Accept-Language: zh-CN,zh;q=0.8 Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3howDateServlet HTTP/1.1 A Simple Sevlet ServerA Simple Sevlet Server 问题:通过浏览器请求一个servlet,servlet返回当前时间 输入:http://127.0.0.1:8080/ShowDateServlet A Simple Sevlet ServerA Simple Sevlet ServerA Simple Sevlet ServerA Simple Sevlet Server过程: ShowDateServlet:实现javax.servlet.Servlet,重写service方法 Request:实现javax.servlet.ServletRequest Response:实现javax.servlet.ServletResponse ServletProcessor:根据请求的servlet名称,通过反射获得servlet的类,实例化后调用service方法。 StaticResourceProcessor:获取静态资源 HttpServer:创建一个ServerSocket用来监听http的请求。获得http请求创建Reqeust和Response,根据请求的路径来选择Processor进行处理。 Tomcat源码分析Tomcat整体架构1创建一个简单的Http Server2核心组件介绍:Connector , Container3其它组件介绍:Lifecycle etc4Tomcat用到的设计模式5Tomcat源码分析核心组件介绍Simple Connector and Container1Tomcat Default Connector2Tomcat Container345核心组件介绍Tomcat StandardWrapperTomcat StandardContextSimple Connector And ContainerSimple Connector And Container 问题:抽象,模块化。 Connector:负责接收客户端的请求。 Container:处理并响应请求。 Simple Connector And ContainerSimple Connector And ContainerSimple Connector And ContainerSimple Connector And Container过程: SimpleConnector:长驻线程。启动ServerSocke监听http请求,获得请求后创建HttpProcessor,并触发proccess方法 HttpProcessor:接受socket,并创建Request和Response,调用connector中已经注入的container,并调用其invoke方法 SimpleContainer:invoke方法被触发,根据Request的请求路径加载sevlet并触发sevlet的service方法,或者加载静态文件。返回给浏览器。 Bootstrap:启动类,创建Connector和Container,将Container注入到Connector中,启动Connector。 Connector and ConnectorConnector and Connector核心组件介绍Simple Connector and Container1Tomcat Default Connector2Tomcat Container345核心组件介绍Tomcat StandardWrapperTomcat StandardContextTomcat Default ConnectorTomcat Default Connector 问题:如何实现多线程处理客户请求? Tomcat Default ConnectorTomcat Default Connector 接口: org.apache.catalina. Connector 核心方法: getContainer setContainer(Container) createRequest createResponse Initialize Tomcat Default ConnectorTomcat Default ConnectorTomcat Default ConnectorTomcat Default ConnectorTomcat Default ConnectorTomcat Default ConnectorHttpConnector:实现 org.apache.catalina. Connector 过程: HttpConnector创建多个HttpProcessor。 HttpConnector创建一个类型为Vector的属性created,目的是缓存创建的HttpProcessor。 HttpConnector创建一个类型为Stack的属性processors,目的是缓存空闲的HttpProcessor。 HttpConnector接受到每个客户端请求,从processors中获取一个空闲的HttpProcessor,将请求分配给此HttpProcessor,如果没有空闲的HttpProcessor则根据最大线程数限制,来创建新的HttpProcessor或者等待出现回收的HttpProcessor。 HttpProcessor触发HttpConnector关联的Container去处理请求。完成处理后进行自身回收,重新进入HttpConnector的Stack 核心组件介绍Simple Connector and Container1Tomcat Default Connector2Tomcat Container345核心组件介绍Tomcat StandardWrapperTomcat StandardContextTomcat ContainerTomcat Container 问题:如何让Container层级化? Tomcat ContainerTomcat Container接口: org.apache.catalina.Container 核心方法: invoke(Request, Response) setParent(Container) getParent():Container addChild(Container) removeChild(Container) map(Request):Container WapperWapperWapper:将一个Sevlet抽象为Wapper ContextContextContext:将一个web工程抽象为ContextHostHostHost:将一个Tomcat虚拟机抽象为HostEngineEngineEngine:实现多个虚拟Host共享一个ConnectorTomcat ContainerTomcat Container 核心组件介绍Simple Connector and Container1Tomcat Default Connector2Tomcat Container345核心组件介绍Tomcat StandardWrapperTomcat StandardContextTomcat StandardWrapperTomcat StandardWrapperTomcat StandardWrapperTomcat StandardWrapperTomcat StandardWrapperTomcat StandardWrapper 问题:如何实现servlet的线程安全? Tomcat StandardWrapperTomcat StandardWrapper Servlet实现javax.servlet.SingleThreadModel Servlet instance = ; if ((servlet implementing SingleThreadModel) { synchronized (instance) { instance.service(request, response); } } else { instance.service(request, response); } Tomcat StandardWrapperTomcat StandardWrapper 将servlet实例注入到instancePool对象池 private Stack instancePool ; private int maxInstances = 20; private int nInstances = 0; synchronized (instancePool) { if (nInstances < maxInstances) { instancePool.push(loadServlet()); nInstances++; }else{ instancePool.wait(); } } 核心组件介绍Simple Connector and Container1Tomcat Default Connector2Tomcat Container345核心组件介绍Tomcat StandardWrapperTomcat StandardContextTomcat StandardContextTomcat StandardContextTomcat StandardContextTomcat StandardContextTomcat源码分析Tomcat整体架构1创建一个简单的Http Server2核心组件介绍:Connector , Container3其它组件介绍:Lifecycle etc4Tomcat用到的设计模式5Tomcat源码分析LifecycleLifecycle 问题: 1.管理组件的生命周期,启动和停止Tomcat中的组件 2.获得指定组件启停的事件(例如创建一个消息发送类,当connector停止的时候,要发信息给管理者) LifecycleLifecycle Lifecycle组成: Lifecycle:定义组件生命的接口 LifecycleEvent:封装事件数据 LifecycleListener:定义监听者的接口 LifecycleSupport:封装所有监听者 LifecycleException:异常 LifecycleLifecycleLifecycle: start():启动生命周期 stop():停止生命周期 addLifecycleListener(listener) removeLifecycleListener(listener) findLifecycleListeners():LifecycleListener[] String START_EVENT = “start“:事件类型 String STOP_EVENT = “stop”:事件类型LifecycleLifecycleLifecycleEvent: 属性: String type:事件类型 Object data:事件关联的数据 Lifecycle lifecycle:生命本身 方法: LifecycleEvent(Lifecycle lifecycle, String type, Object data) getType() getData() getLifecycle() LifecycleLifecycle LifecycleListener: lifecycleEvent(LifecycleEvent event):当所监听的生命组件发生事件时候会触发本方法。LifecycleLifecycleLifecycleSupport: 属性: LifecycleListener listeners[] :包含listener Lifecycle lifecycle:生命本身 方法: addLifecycleListener(LifecycleListener listener) findLifecycleListeners(): LifecycleListener[] removeLifecycleListener(LifecycleListener listener) fireLifecycleEvent(String type, Object data):触发所包含的所有listnerLifecycleLifecyclenullClass Triger implemt Lifecycl { List listerList; addListener(Listener listener) { Listener.add(listener); } Run() { While(true) { For(Listener ls:listerList) { Ls.lifecycEven(); } Wait(50000); } } }Tomcat整体架构Tomcat整体架构Server and ServiceServer and Serviceconfig/server.xmlconfig/server.xml Tomcat源码分析Tomcat整体架构1创建一个简单的Http Server2核心组件介绍:Connector , Container3其它组件介绍:Lifecycle etc4Tomcat用到的设计模式5Tomcat源码分析Tomcat用到的设计模式Tomcat用到的设计模式 观察者设计模式 门面设计模式 责任链设计模式 观察者设计模式观察者设计模式门面设计模式门面设计模式责任链设计模式责任链设计模式nullQ&A
本文档为【Tomcat源码分析】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_636285
暂无简介~
格式:ppt
大小:5MB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2012-09-18
浏览量:16