`

Tomcat源码学习:一个最简单的“Tomcat”

阅读更多

        花了不少时间看了Tomcat7的源码,相结合《HowTomcatWorks》这本书学到的内容,感觉认识了不少知识。写些文章总结一下,以免过后忘记了。

 

        Tomcat的两个重要组件:容器(Container)连接器(Connector),是我这次学习源码过程中,主要研究的内容。Tomcat是一个复杂的Servlet容器,但是,简单来说它有3个基本任务,对于每个从客户端发来的请求,Tomcat都会为其完成以下3个操作:

        1、根据从socket传入的信息(解析socket的InputStream),创建一个request对象,用可能会在Servlet中使用到的信息来填充该request对象,如参数、头、cookies、查询字符串、URI等。request对象是javax.servlet.ServletRequest接口或javax.servlert.http.ServletRequest接口的实例。

        2、创建一个Response对象,用来向Web客户端发送响应,返回信息。response对象是javax.servlet.ServletResponse接口或javax.servlert.http.ServletResponse接口的实例。

        3、调用Servlet的service(request,response)方法,Servlet将从request中读取需要的信息,并通过response对象发送响应信息。

 

        简单地说,Tomcat的连接器和容器,就是完成上面三个步骤的组件。连接器负责接收Web客户端发来的请求,然后处理请求,生成request和response对象,并把这两个对象传给容器。容器负责加载Tomcat中的web程序、加载web程序中的Servlet、jsp等。当连接器调用容器来执行Servlet时,容器找出需要调用的Servlet并执行Servlet的service(request,response)方法。

 

        Tomcat的容器和连接器其实挺复杂、强大,但是就不在本文中详细解析了。本文只是举个简单栗子说明一下Tomcat是如何接收客户端信息并调动Servlet的。

        下面是我结合《HowTomcatWorks》这本书中的代码,写的一个简单的“Tomcat”程序,它可以向Web浏览器返回程序webapps文件夹下的静态文件和执行Servlet。程序项目的结构如图:


com.st.connector包是Connector的实现;com.st.container包是Container的实现;startup包是启动程序用的。

webapps文件夹下是一个模拟的web程序,包含一个Servlet类和3个静态文件。当程序启动时,Container会加载webapps文件夹下的Servlet。 当运行程序时,在浏览器中输入http://localhost:8080/HelloServlet,则会调用HelloServlet。当输入http://localhost:8080/时,默认显示index.html。http://localhost:8080/brazil.jpg,浏览器展示五星巴西。当输入的路径不存在时,提示404 。

项目源码可以在附件中下载:SimpleTomcat.rar

 

源码挺简单,就不详细说明了。

 

  • 大小: 72.7 KB
分享到:
评论

相关推荐

    Tomcat9.0_SourceCode_WithIdea:出于兴趣学习Tomcat源代码-tomcat source code

    Tomcat9.0_SourceCode_WithIdea ...注意:如果您本机上已经安装了Tomcat,并且是自启动的,保证您本机的Tomcat和当前阅读的内核所占的端口不是同一个。如果您不会设置,最好将现在的Tomcat进展杀死

    JavaWeb+tomcat+mysql+jsp实现论坛系统【完整源码+数据库+项目运行视频】

    javaWeb+tomcat+mysql+jsp实现论坛系统【完整源码+数据库+项目运行视频】 一、项目简介 本项目是一套基于spring+jsp+mysql实现的Java web论坛系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的...

    Java项目:论坛系统(javaWeb+tomcat+mysql+jsp)【完整源码+数据库+指导运行】

    一、项目简介 本项目是一套基于spring+jsp+mysql实现的Java web论坛系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设...

    SSH2项目整合源码

    对于学习java的新手来说,这些东西还是必须要掌握的,框架的东西有很多要学的,之前自己刚开始学习框架的时候懵,但是慢慢的琢磨就能弄明白了,这里给大家分享一个最简单的Spring+Struts2+hibernate整合的源码,...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java 在线考试系统源码(含数据库脚本).rar

    前言:我们在学习了Java各种基础知识之后,最需要做的就是学会应用,开发一些项目把所学的知识应用起来,下面的这个《校园在线考试系统》实战项目就是比较好的练手教程。 业务描述:根据前面所做的需求分析及用户的...

    云教务v1.1源码 CloudDeanV1.rar

    云教务v1.1源码 源码描述: 一、源码特点 1、在我们的日常教学活动中,动态要素是教师、学生及心理环境,人... tomcat:tomcat 7.0.68以上 2、登录系统账号 管理员账号:admin#yunjiaowu.cn(#换@) 管理员密码:111111

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    基于SpringBoot+vue房屋租赁系统(源码+部署说明+演示视频+源码介绍).zip

    这是一个基于SpringBoot和Vue的房屋租赁系统的源码资源包。这个系统是一个前后端分离的项目,后端使用SpringBoot进行开发,前端使用Vue进行开发。 在后端部分,SpringBoot作为主流的Java Web开发框架,以其轻量级、...

    名为责任链或者拦截器或者过滤器的简单模拟

    tomcat源码的Valve(tomcat中各种各样容器如Wrapper,Context都是靠Valve实现各种功能), 以及最早学习到的java web中的javax.servlet.Filter的概念, 都是一种链式的处理流程,这一个环节处理完成,然后处理另一个...

    基于Java的高校毕业设计选题管理系统毕业论文

    管理员虽然也是一个角色,但是是个特殊的用户,其实在数据库中也是由教师信息表来维护,只不过有一个字段是专门来识别是否是管理员。管理员可以注册教师和学生的信息,同时支持Excel表批量注册,只要上传的Excel...

    基于ssm的教务管理系统-01

    3.tomcat环境:Tomcat 8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目 6.数据库:MySql ...

    基于JavaWeb的药店管理系统源码(毕业设计)+文档说明

    ​ 一个简单的药店管理系统,有以下功能: ​ 实现进货、管理仓库、管理订单、管理退货、问题药品管理 开发工具介绍 ​ 药店管理系统的后端服务器使用Java语言进行开发,使用了Spring框架进行Web开发,使用Mysql...

    基于ssm_mysql_环卫管理平台_源码.zip

    java毕设项目,源码齐全,java+SSM+MySql 本次系统的开发根据我们以往的经验而言所采用的语言首先是开源免费的,因为毕竟要考虑到其系统的经济性,所以语言选择方面采用的是JAVA语言,而且JAVA语言也是我们在大学...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    Tomcat是一个免费的开源的Serlvet容器,在Tomcat中,应用程序的部署很简单,你只需将你的WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压。你在浏览器中访问这个应用的Jsp时,通常第一次会很...

    基于java和jsp的聊天系统完整源码(含配套jsp网站)

    这是一个很多年前用java和jsp给别人做的网络聊天系统(具备网站注册功能),支持两种后方数据库模式:access和Oracle, 对于使用 oracle的情况(也可以使用MySQL,接口转换很简单),这套系统完全跨平台(windows和...

    java8源码-JavaInterview:Java面试

    源码 目录(ctrl + f 查找更香) 项目准备 面试知识点 公司面经 Java 基础 容器(包括juc) 并发 JVM Java8 计算机网络 计算机操作系统 Linux 数据结构与算法 数据结构 算法 数据库 MySQL mysql(优化思路) 系统...

    jpivot学习总结.doc

    属性很多,并且是 schema 编写的关键,使用它可以构成一个结构树, Level 的先后顺序决定了 Level 在这棵树上的的位置,最顶层的 Level 位于树的第一级,依次类推。 Level 的属性如下: 属性名 含义 name 名称 ...

Global site tag (gtag.js) - Google Analytics