- 浏览: 60365 次
- 性别:
- 来自: 应县
最新评论
-
fc19861011:
请问你解决了吗?poi修改word中生成的图表数据找了好久没发 ...
jacob 怎么改变 word图表的数据呢? -
longgol:
GridPanel中mouseover事件获取列index
...
GridPanel中mouseover事件获取行index
Tomat源码学习(二)
Tomat6的整体架构
在上篇文章中,我们已经成功将Tomcat6.0的源代码导入到Eclipse IDE中。现在我们就开始学习Tomcat源码。Tomcat源代码共有1000多个java类,代码行数大约28万到30万行左右。从项目规模上说,可算得上是一个中型项目。要学习理解Tomcat源代码,我们有多种办法可行。最原始的一种办法就是,打开Debugger,逐行跟踪,看看Tomcat如何启动,如何处理客户端请求,如何编译动态jsp页面。第二种办法是利用逆向工程,把Tomcat的总体类图先描绘出来,然后再结合sequence diagram,来学习理解它。我们在这里采取从顶到底的阅读方法,先了解整体架构,然后逐步细化。所谓“纲举目张”,说的就是这个道理。
首先,我们可以从功能的角度将Tomcat源代码分成5个子模块,它们分别是:
1) Jsper子模块
这个子模块负责jsp页面的解析,jsp属性的验证,同时也负责将jsp页面动态转换为java代码并编译成class文件。在Tomcat源代码中,凡是属于org.apache.jasper包及其子包中的源代码都属于这个子模块;
2) Servlet和Jsp规范的实现模块
这个子模块的源代码属于javax.servlet包及其子包,如我们非常熟悉的javax.servlet.Servlet接口、javax.servet.http.HttpServlet类及javax.servlet.jsp.HttpJspPage就位于这个子模块中;
3) Catalina子模块
这个子模块包含了所有以org.apache.catalina开头的java源代码。该子模块的任务是规范了Tomcat的总体架构,定义了Server、Service、Host、Connector、Context、Session及Cluster等关键组件及这些组件的实现,这个子模块大量运用了Composite设计模式。同时也规范了Catalina的启动及停止等事件的执行流程。从代码阅读的角度看,这个子模块是我们阅读和学习的重点。
4) Connectors子模块
如果说上面三个子模块实现了Tomcat应用服务器的话,那么这个子模块就是Web服务器的实现。所谓连接器(Connector)就是一个连接客户和应用服务器的桥梁,它接收用户的请求,并把用户请求包装成标准的Http请求(包含协议名称,请求头Head,请求方法是Get还是Post等等)。同时,这个子模块还按照标准的Http协议,负责给客户端发送响应页面,比如在请求页面未发现时,connector就会给客户端浏览器发送标准的Http 404错误响应页面。
Tomcat实现了两类连接器,除了上述实现了Http1.1协议的Coyote连接器外,还有一种JK连接器,JK连接器是将Tomcat和第三方Web服务器(如Apache或IIS Web服务器)连接起来, Tomcat此时充当应用服务器的角色,负责处理和解释Jsp及Servlet请求。
Coyote连接器的源代码位于以org.apache.coyote开头的包中,JK连接器的代码位于以org.apache.jk开头的包中。
另外,Tomcat虽然实现了Web服务器的功能,但是其实现不是非常完美,效率不高,所以在生产环境中,我们通常要将Tomcat和Apache Web Server配合使用,尽量利用它们各自的优势。
5) Resource子模块
这个子模块包含一些资源文件,如Server.xml及Web.xml配置文件。严格说来,这个子模块不包含java源代码,但是它还是Tomcat编译运行所必需的。
上面我们从模块组件的角度,简单介绍了Tomcat的子模块划分及其相应的功能。下面我们简单以图示意之。
从上面的Tomcat子模块示意图中,我们可以看到,来自客户端的请求首先由Connector子模块进行处理,然后根据情况或者发送到第三方的Web服务器,或者转发到Jsper模块进行处理,或者转发到Jsp/Servlet子模块处理。总体说来,Tomcat通过下面三种方式处理来自客户端的请求:
(1) 如果客户端发出静态页面请求,如果没有配置第三方Web服务器,此时客户端的请求直接交由Coyote Connector子模块处理,然后返回结果;如果配有第三方应用服务器,那么客户的请求直接由第三方应用服务器响应,然后返回静态记过页面。客户端请求的执行过程如图中绿线所示。
(2) 如果客户端请求Jsp页面,该请求首先转发到发送Coyote连接器(在没有配置第三方Web服务器的情况下),或者经过第三方Web服务器将客户请求转发到JK连接器;然后该Jsp请求将交给Jsper子模块处理,Jsper将根据情况验证编译该Jsp页面,最后由Jsp/Servlet模块对客户请求进行处理。Jsp请求处理完毕,服务器首先把响应结果发送给连接器子模块,连接器子模块根据情况或将响应结果页面发送到第三方Web服务器,或者直接发送响应结果页面到客户端。
(3) 如果客户请求Servlet,Tomcat的处理流程和Jsp页面的请求执行流程基本类似,只不过少了一个Jsper子模块处理罢了。
Tomat6的整体架构
在上篇文章中,我们已经成功将Tomcat6.0的源代码导入到Eclipse IDE中。现在我们就开始学习Tomcat源码。Tomcat源代码共有1000多个java类,代码行数大约28万到30万行左右。从项目规模上说,可算得上是一个中型项目。要学习理解Tomcat源代码,我们有多种办法可行。最原始的一种办法就是,打开Debugger,逐行跟踪,看看Tomcat如何启动,如何处理客户端请求,如何编译动态jsp页面。第二种办法是利用逆向工程,把Tomcat的总体类图先描绘出来,然后再结合sequence diagram,来学习理解它。我们在这里采取从顶到底的阅读方法,先了解整体架构,然后逐步细化。所谓“纲举目张”,说的就是这个道理。
首先,我们可以从功能的角度将Tomcat源代码分成5个子模块,它们分别是:
1) Jsper子模块
这个子模块负责jsp页面的解析,jsp属性的验证,同时也负责将jsp页面动态转换为java代码并编译成class文件。在Tomcat源代码中,凡是属于org.apache.jasper包及其子包中的源代码都属于这个子模块;
2) Servlet和Jsp规范的实现模块
这个子模块的源代码属于javax.servlet包及其子包,如我们非常熟悉的javax.servlet.Servlet接口、javax.servet.http.HttpServlet类及javax.servlet.jsp.HttpJspPage就位于这个子模块中;
3) Catalina子模块
这个子模块包含了所有以org.apache.catalina开头的java源代码。该子模块的任务是规范了Tomcat的总体架构,定义了Server、Service、Host、Connector、Context、Session及Cluster等关键组件及这些组件的实现,这个子模块大量运用了Composite设计模式。同时也规范了Catalina的启动及停止等事件的执行流程。从代码阅读的角度看,这个子模块是我们阅读和学习的重点。
4) Connectors子模块
如果说上面三个子模块实现了Tomcat应用服务器的话,那么这个子模块就是Web服务器的实现。所谓连接器(Connector)就是一个连接客户和应用服务器的桥梁,它接收用户的请求,并把用户请求包装成标准的Http请求(包含协议名称,请求头Head,请求方法是Get还是Post等等)。同时,这个子模块还按照标准的Http协议,负责给客户端发送响应页面,比如在请求页面未发现时,connector就会给客户端浏览器发送标准的Http 404错误响应页面。
Tomcat实现了两类连接器,除了上述实现了Http1.1协议的Coyote连接器外,还有一种JK连接器,JK连接器是将Tomcat和第三方Web服务器(如Apache或IIS Web服务器)连接起来, Tomcat此时充当应用服务器的角色,负责处理和解释Jsp及Servlet请求。
Coyote连接器的源代码位于以org.apache.coyote开头的包中,JK连接器的代码位于以org.apache.jk开头的包中。
另外,Tomcat虽然实现了Web服务器的功能,但是其实现不是非常完美,效率不高,所以在生产环境中,我们通常要将Tomcat和Apache Web Server配合使用,尽量利用它们各自的优势。
5) Resource子模块
这个子模块包含一些资源文件,如Server.xml及Web.xml配置文件。严格说来,这个子模块不包含java源代码,但是它还是Tomcat编译运行所必需的。
上面我们从模块组件的角度,简单介绍了Tomcat的子模块划分及其相应的功能。下面我们简单以图示意之。
从上面的Tomcat子模块示意图中,我们可以看到,来自客户端的请求首先由Connector子模块进行处理,然后根据情况或者发送到第三方的Web服务器,或者转发到Jsper模块进行处理,或者转发到Jsp/Servlet子模块处理。总体说来,Tomcat通过下面三种方式处理来自客户端的请求:
(1) 如果客户端发出静态页面请求,如果没有配置第三方Web服务器,此时客户端的请求直接交由Coyote Connector子模块处理,然后返回结果;如果配有第三方应用服务器,那么客户的请求直接由第三方应用服务器响应,然后返回静态记过页面。客户端请求的执行过程如图中绿线所示。
(2) 如果客户端请求Jsp页面,该请求首先转发到发送Coyote连接器(在没有配置第三方Web服务器的情况下),或者经过第三方Web服务器将客户请求转发到JK连接器;然后该Jsp请求将交给Jsper子模块处理,Jsper将根据情况验证编译该Jsp页面,最后由Jsp/Servlet模块对客户请求进行处理。Jsp请求处理完毕,服务器首先把响应结果发送给连接器子模块,连接器子模块根据情况或将响应结果页面发送到第三方Web服务器,或者直接发送响应结果页面到客户端。
(3) 如果客户请求Servlet,Tomcat的处理流程和Jsp页面的请求执行流程基本类似,只不过少了一个Jsper子模块处理罢了。
发表评论
-
Tomcat集群与负载均衡
2011-01-26 16:00 589在单一的服务器上执行W ... -
xalan-2.7.0.jar下载地址
2011-01-26 15:59 3178xalan-2.7.0.jar下载地址:http://svn. ... -
provider org.apache.xalan.processor.TransformerFactoryImpl not found
2011-01-26 15:58 944完整的Exception: Exception startin ... -
Apache与Tomcat整合的简单方法
2011-01-26 15:57 6761、准备,下载需要的文件。这里假定你已经正确安装配置好了JDK ... -
(转)Tomcat源码学习(一)
2011-01-26 15:57 593Tomcat源码学习(一) http://carllgc.bl ... -
Tomat6架构探讨(续)
2011-01-26 15:54 702Tomat源码学习(二) 下面,我们重点针对Catalin ... -
JNDI
2011-01-26 15:49 695Java术语 英文全称是:Java ... -
JSP内建对象- - 转
2011-01-26 15:48 555① out - javax.servlet.jsp.jspWr ... -
全面理解String(JAVA复习)- -
2011-01-26 15:48 5841. 首先String不属 ... -
初学者如何开发出高质量的J2EE系统 (转载)
2011-01-26 15:47 697J2EE学习者越来越多,J2E ... -
关于JSP中的taglib uri
2011-01-26 15:47 1009自定义标签在jsp中应用是需要声明标签库,有下面两种方式: 1 ... -
context-param和init-param区别
2011-01-26 15:46 443web.xml里面可以定义两种参数: (1)applicati ... -
javax.servlet.Filter运用
2011-01-26 15:46 687Servlets Filter 是Servlet 2.3 规范 ... -
javax.servlet.FilterChain
2011-01-26 15:45 961javax.servlet Interface Filter ... -
引用 五个有用的过滤器 Filter
2011-01-26 15:45 620引用 xyz 的 五个有用的过滤器 Filter 来源:htt ... -
spring:简单的属性参考
2011-01-26 15:43 549在定义文件(XML配置文件)中定义Bean时,可以直接指定一个 ... -
spring:Inversion of Control具体实现【资料搜集】
2011-01-26 15:42 598IoC(Inversion of Control)控制反转的具 ... -
学习Spring前必须了解的几点【资料搜集】
2011-01-26 15:42 847轻量级(Lightweight) 轻量级的形容是相对于 ... -
struts2:主题: Interceptor在Struts2中的应用... [图片]
2011-01-26 15:41 665Interceptor(拦截器)将Action共用的行为独立出 ... -
struts2配置文件介绍
2011-01-26 15:40 634一、Struts2配置文件 Struts2相关的配置文件有w ...
相关推荐
基于Javaweb+Tomcat+MySQL的大学生公寓管理系统源码+数据库+示例图片.zip基于Javaweb+Tomcat+MySQL的大学生公寓管理系统源码+数据库+示例图片.zip 基于Javaweb+Tomcat+MySQL的大学生公寓管理系统源码+数据库+示例...
tomcat启动流程图,我花了几个小时的时间生成的,对学习tomcat源码很有帮助,这是粒度最小的一张图,如果想要粗粒度的可以私信联系我。
基于JavaEE采用SSM框架实现的图书管理系统源码+项目说明(图片采用异步上传,Java后端通过解析json进行接收。可以把借书信息导出为xls格式进行保存)(tomcat需要为8.5版本,9.0会导致js文件在浏览器显示乱码).zip
word源码java ...如果配置nginx+ftp服务+tomcat来做图片服务器,访问不到,请重点参考此问答 自动化发布shell脚本: 可以在这里下载到一期课程自动化发布脚本,当然具体的路径还要根据自己的实际项目的环境修改
内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java...
基于Java Web的电影购票系统源码+项目说明+示例图片.zip ## 项目实现的主要业务功能 ## 1. 用户模块:实时订票、查看订单、账户充值、修改个人信息、猜你喜欢等 2. 管理员模块:票项管理、用户管理、订单管理。 ## ...
项目源码经过严格测试,可稳定运行,并支持二次开发定制,满足各类用户需求。 主要功能特点: 1. 用户管理:支持用户注册、登录、修改密码和个人信息等功能。 2. 相册管理:用户可以创建、删除、编辑相册,上传、...
本设计源码提供了一个基于Java的...该系统基于servlet、Tomcat、MySQL和bootscript技术构建,适合用于学习和实践JavaScript、CSS、HTML、Java、Shell、Python、TypeScript和PHP技术,以及开发校园失物招领相关的系统。
JSPjava图书信息管理网站源码 源码描述: ... 后台课操作对图书添加或删除:图书条形码,图书名称,图书所在类别,图书价格,库存,出版社,图书图片 三、注意事项 开发环境为jdk1.7,数据库为 mysql
word源码java ...如果配置nginx+ftp服务+tomcat来做图片服务器,访问不到,请重点参考此问答 自动化发布shell脚本: 可以在这里下载到一期课程自动化发布脚本,当然具体的路径还要根据自己的实际项目的环境修改
持续学习中……针对这套源码会持续更新,敬请期待~~~ 1、基础环境 Jdk1.8+Tomcat8.5+Maven3.5.2+myeclipse2017+mysql5.6 2、参考源码 感谢资源提供者,原始资源下载地址 ...
数据库名:order ...如需修改或有出入,mybatis里修改 若项目搭完404,请把项目build path一下(项目上右键),Tomcat7.0 -remove,再add ...在某企业培训中学习使用的系统源码,源码可供二次开发或者大家参考学习使用。
当图片传到tomcat1中到tomcat2中查找图片,我们可以将tomcat1和tomcat映射到另一台服务器上,然后做共享。或者在负载均衡中进行处理。 方案1:在负载均衡服务器上做一个session 映射,如果有记录则分发到原服务器...
笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此...
本项目是一套基于SSM的网上宠物店,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本、软件工具、项目说明等,该项目可以直接作为毕设使用。 项目都经过严格...
本项目是一套基于SSH的旅游网站,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本、软件工具、项目说明等,该项目可以直接作为毕设使用。 项目都经过严格...
本设计源码提供了一个基于Java的学生信息管理系统。项目包含130个文件,主要使用Java编程语言,并包含了CSS、JavaScript和HTML。文件类型包括80个Java源代码文件、35个JSP页面文件、3个XML配置文件、1个GIT忽略文件...
基于JavaEE采用SSM框架实现的图书管理系统源码+项目说明(图片采用异步上传,Java后端通过解析json进行接收。可以把借书信息导出为xls格式进行保存)(tomcat需要为8.5版本,9.0会导致js文件在浏览器显示乱码).zip
jsp做的新闻发布系统,具有全面的新闻发布和管理功能,可以上传图片,和后台管理新闻的系统,可以作为jsp初学者的些学习和借鉴,真的很不错的源码哦 ,